我加入的表一樣,這裏的結果: http://www.w3schools.com/sql/sql_join_left.asp連接的表 - 和WHERE
LastName FirstName OrderNo
Hansen Ola 1
Hansen Ola 2
Hansen Ola 3
Pettersen Kari 8
Pettersen Kari 9
Svendson Tove
我怎樣才能找到具有與之相關的兩個訂單1和2人(姓,名)名單。
我加入的表一樣,這裏的結果: http://www.w3schools.com/sql/sql_join_left.asp連接的表 - 和WHERE
LastName FirstName OrderNo
Hansen Ola 1
Hansen Ola 2
Hansen Ola 3
Pettersen Kari 8
Pettersen Kari 9
Svendson Tove
我怎樣才能找到具有與之相關的兩個訂單1和2人(姓,名)名單。
完全佔據例子(與可讀性明確table.Field):
Select persons.LastName, persons.FirstName, orders.OrderNo
FROM Persons
LEFT JOIN Orders order1 ON persons.P_Id=orders1.P_Id
LEFT JOIN Orders order2 ON persons.P_Id=orders2.P_Id
where (orders.OrderNo = 1 or orders.OrderNo = 2
在使用連接時非常明確地表示重要,以便您(以及後面的開發人員)不會感到困惑。不提供table.Field也會拋出錯誤,如果兩個表具有相同名稱的字段。
更新
從另一個迴應評論:
或作品,但無論怎樣我都會喜歡。我需要得到OrderNo = 1和OrderNo = 2的記錄.1和2都一起計算。如果我使用或它會返回我有這些值或兩個之一的記錄
如果我正確閱讀這個,你只是在尋找重複人(人)的訂單?如果是這樣的話,那麼這將這樣的伎倆:
Select DISTINCT orders1.OrderNo, persons.LastName, persons.FirstName
FROM Persons
LEFT JOIN Orders orders1
ON persons.P_ID = orders1.P_ID
LEFT JOIN Orders orders2
ON persons.P_ID = orders2.P_ID
Where orders1.P_ID = orders2.P_ID
如果你只想要下單有一個單一的,特定的人,這是一個不同的查詢一起
其他答案告訴你刪除第二WHERE
。
他們沒有說的是,如果您要查找記錄1和2,則需要使用OR
而不是AND
。指定AND
將會失敗,因爲查詢會查找符合兩個條件的單個記錄,在這種情況下這當然是不可能的。
所以你WHERE
條款應該是這樣的:
WHERE OrderNo = 1 OR OrderNo = 2
或有效,但沒有我想要的。我需要得到OrderNo = 1和OrderNo = 2的記錄.1和2都一起計算。如果我使用OR,它會返回具有其中一個或兩個值的記錄。 – swoorn
@ user955399,如果你想要一些非常具體的東西,請編輯問題以列出你想要的確切結果。 _(最好以表格的形式,就像你的問題中的table1一樣)_ – Johan
@ user955399 - 同意;這個問題真的不清楚,這是你想要的。要在單個查詢中實現這一點,您需要徹底改變您加入表格的方式。就目前來看,你沒有一個OrderNo = 1和= 2的記錄;你有兩個記錄。可以重寫查詢以將兩個訂單號碼放入同一記錄中,但這可能不是一種明智的做法。僅僅收集匹配的兩條記錄並在SQL之外顯示/處理它們以滿足您的需求就容易得多。 – Spudley
WHERE OrderNo = 1 AND WHERE OrderNo = 2
你的規範是非常短暫的。
上面AND的關係等價物可能是UNION
例如
SELECT *
FROM Orders
WHERE OrderNo = 1
UNION
SELECT *
FROM Orders
WHERE OrderNo = 2;
可能的是,關係運算符分爲例如具有順序號1和2的任何人的返回姓名,例如,
SELECT DISTINCT LastName, FirstName
FROM Orders AS O1
WHERE NOT EXISTS (
SELECT OrderNo
FROM (VALUES (1), (2)) AS Divisor (OrderNo)
EXCEPT
SELECT OrderNo
FROM Orders AS O2
WHERE O2.LastName = O1.LastName
AND O2.FirstName = O1.FirstName
);
但我有些懷疑你的意思是邏輯或而非邏輯與(我知道是誰在自然語言中的單詞「和」寫sepcs業務分析師來表示邏輯或如「這可能是這一點,它可能那是「)例如
SELECT *
FROM Orders
WHERE (OrderNo = 1 OR OrderNo = 2);
SQL對這個漂亮的語法糖:
SELECT *
FROM Orders
WHERE OrderNo IN (1, 2);
我假設你希望誰同時擁有訂單1和2
您可以使用此查詢的人的名字:
SELECT LastName, FirstName
FROM MyTable
WHERE OrderNo IN (1, 2)
GROUP BY LastName, FirstName
HAVING COUNT(*) = 2
注:我假設你不會有確切的重複記錄,如果你這樣做需要首先消除重複。
不要使用w3schools,這不是一個好資源,請參閱:http://w3fools.com – Johan