我加入的表一样,这里的结果: 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