我已经像这里的结果一样加入了表格: http://www.w3schools.com/sql/sql_join_left.asp
LastName FirstName OrderNo
Hansen Ola 1
Hansen Ola 2
Hansen Ola 3
Pettersen Kari 8
Pettersen Kari 9
Svendson Tove
如何找到同时包含订单1和订单2的人员列表(LastName,FirstName)。
答案 0 :(得分:3)
其他答案告诉您删除第二个WHERE
。
他们没有说的是,如果您要查找记录1和2,则需要使用OR
,而不是AND
。指定AND
将失败,因为查询将查找与这两个条件匹配的单个记录,在这种情况下当然不可能。
所以你的WHERE
子句应如下所示:
WHERE OrderNo = 1 OR OrderNo = 2
答案 1 :(得分:2)
删除第二个WHERE
WHERE OrderNo = 1 OR OrderNo = 2
OR
WHERE OrderNo IN (1,2)
答案 2 :(得分:1)
首先,不要两次写WHERE
。每SELECT
只允许一个WHERE
条款。
其次,你不能有OrderNo = 1 AND OrderNo = 2
行。这两个都不可能同时成立。使用OR
代替AND
:
WHERE OrderNo = 1
OR OrderNo = 2
在这种情况下,您可以使用IN:
WHERE OrderNo IN (1, 2)
答案 3 :(得分:0)
以完整的示例(带有显式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也会抛出错误。
<强>更新强>
对另一个回复的评论:
OR有效,但没有我想要的。我需要得到OrderNo = 1和OrderNo = 2的记录.1和2值都在一起。如果我使用OR,它将返回具有这些值之一或两个
的记录
如果我正确地阅读此内容,您只是在寻找重复人物(人)的订单?如果是这种情况,那么这将解决问题:
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
如果您只想要单个特定人员的订单,那么这是一个不同的查询
答案 4 :(得分:0)
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
);
但是我怀疑你的意思是逻辑OR而不是逻辑AND(我知道一个商业分析师用自然语言中的'和'这个词写成sepcs意味着逻辑OR,例如“它可能是这个,它可能是那个”)例如
SELECT *
FROM Orders
WHERE (OrderNo = 1 OR OrderNo = 2);
SQL有很好的语法糖:
SELECT *
FROM Orders
WHERE OrderNo IN (1, 2);
答案 5 :(得分:0)
我假设你想要拥有订单1和2的人的名字。
您可以使用此查询:
SELECT LastName, FirstName
FROM MyTable
WHERE OrderNo IN (1, 2)
GROUP BY LastName, FirstName
HAVING COUNT(*) = 2
注意:我假设您没有完全重复的记录,如果您需要先删除重复记录。