![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 七嘴八舌異言堂
(https://www.pcdvd.com.tw/forumdisplay.php?f=12)
- - 詢問SQL語法問題XD.....
(https://www.pcdvd.com.tw/showthread.php?t=1153782)
|
|---|
詢問SQL語法問題XD.....
應該可以問吧...:ase
請問以下這種語法是有效的嗎? SELECT * FROM A, B ON A.id=B.id; 有人見過在某個SQL DB或著以前某個古老的SQL parser可以通過的?..:confused:... 我的理解是FROM取得的資料來源生成VT1後(cartesian product).. 通過ON匹配後再生成VT2.. 可是這語法真的是有效的嗎?... 對SQL標準不熟...:laugh: 還是以前某個古老的SQL標準(ANSI)允許這種方式??...:confused: |
引用:
這個是你要的? https://stackoverflow.com/questions...multiple-tables |
引用:
小弟不是問這種顯式的JOIN語句...:ase FROM 後面直接接ON.. 這種語句形式在某些SQL DB或著某個古老的SQL標準是有效的嗎?..:confused:.. 有人有見過嗎?.. 還是他根本是錯誤的??? |
引用:
印象很淺,好像是不宣告結合方式的話,是使用INNER JOIN結合 不確定有沒有記錯。 |
引用:
我這樣用是沒有問題 SELECT * FROM A, B WHERE A.id=B.id; |
引用:
這是以前JOIN的老用法... 用WHERE搭=, *=, =* ... 以前在很老的教科書有看過... 但是*=和=*這兩種運算子現在大多SQL parser應該都不給通過了吧... |
引用:
*= =* 看都沒看過啊 :laugh: |
SELECT *
FROM A, B WHERE A.id=B.id; 這是標準的,不過就是要用where 不是on,這樣sql92標準, oracle 有用 A.id=B.id(+) 就是了 |
在詢問一下..
有兩張資料表.. Customers和Orders 假設 SELECT COUNT(custid) FROM Customers; 計算出來的結果有91 然後下面敘述是這樣 SELECT c.custid, c.companyname, o.orderid FROM Sales.Customers c LEFT JOIN Sales.Orders o ON c.custid=o.custid AND c.city='Paris'; 有人上過M$的課程應該有看過這個SQL statement.. (這個敘述我相信confuse很多學習者..) 在現代的SQL parser, ON與JOIN通常都是成對出現的... 我的理解是這樣的 1. 先掃描FROM取得主表(Customers)來源生成VT1. (從前面知道Customers有91筆) 2. SQL Engine剖析到OUTER JOIN. 上述SQL語句是LEFT JOIN, 取得匹配出來的結果, 然後把從ON語句條件中從VT1沒有匹配到LEFT JOIN右表(right table; Orders)的那些VT1紀錄補回去. 我先用早期的INNER JOIN來看, 先得知匹配成功的結果 SELECT c.custid, c.companyname, o.orderid FROM Customers c, Orders o WHERE c.custid=o.custid AND c.city='Paris'; 74 Customer YSHXL 10738 74 Customer YSHXL 10907 74 Customer YSHXL 10964 74 Customer YSHXL 11043 回傳四筆結果, 他們都是同一個custid.. 因此, (91-1)+4=94. 這是從右表沒有匹配成功的紀錄(90)加上匹配成功的紀錄(4)的總資料數量 3. 生成VT2, 將94筆填進去傳回 4. 根據SELECT從VT2篩選, 生成VT3傳回 求SQL大佬看一下我這個理解是否正確???...:confused:... |
| 所有的時間均為GMT +8。 現在的時間是03:48 PM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2026。