我需要通过它们所在的城市配对2个供应商名称。
<name supplier a> <name supplier b> <location>
我通过交叉加入一个供应商表来获得该表格 - 现在我需要确保它只有一条记录 - 所以要么在代码块顶部或者:
<name supplier b> <name supplier a> <location>
示例:
MärzenAG| Maier KG |乌尔姆
OR
Maier KG | MärzenAG|乌尔姆
因此:我只需要上述结果之一。 目前我从Crossjoin中得到两个记录:
SELECT le.Liefname, le.liefstadt, li.Liefname
FROM Lieferanten le CROSS JOIN Lieferanten li
WHERE le.Liefstadt not like ''
AND li.Liefstadt not like ''
AND le.liefstadt=li.liefstadt;
liefstadt是将它们配对的城市,而liefname是我需要输出的名称。
我想要做的另一种方法是:
SELECT a.LiefName, b.LiefName, LiefStadt
FROM Lieferanten a, Lieferanten b
WHERE a.LiefStadt = b.LiefStadt
AND a.LiefName <> b.LiefName;
问题在于结果中仍然存在重复。
我希望我可以说足以让你理解我的问题,因为我不是母语人士。 (因此可能错过了一个对我有帮助的现有主题。)
答案 0 :(得分:2)
您只需要调整第一种方法:
SELECT le.Liefname, le.liefstadt, li.Liefname
FROM Lieferanten le CROSS JOIN Lieferanten li
WHERE le.Liefstadt not like ''
AND li.Liefstadt not like ''
AND le.liefstadt=li.liefstadt
AND le.Liefname < li.Liefname
我建议你更改查询以使用连接,这样表之间的条件是显而易见的。
SELECT le.Liefname, le.liefstadt, li.Liefname
FROM Lieferanten le JOIN
Lieferanten li
on le.liefstadt=li.liefstadt and
le.Liefname < li.Liefname
WHERE le.Liefstadt not like '' and
li.Liefstadt not like ''
虽然不是必需的,但使用on
子句来比较两个表中的字段的条件会产生比在where
子句中放置这些条件更可读和可维护的查询。
答案 1 :(得分:0)
您可以使用a.LiefName < b.LiefName
始终首先列出最小的名称。如有必要,如果表格中有重复项,请添加DISTINCT
。
SELECT DISTINCT a.LiefName
, b.LiefName
, a.LiefStadt
FROM Lieferanten a
JOIN Lieferanten b
ON a.LiefStadt = b.LiefStadt
WHERE a.LiefStadt <> ''
and a.LiefName < b.LiefName