【发布时间】:2016-03-30 16:24:35
【问题描述】:
suppliers表:
PK_ID supplier supplier_code
1 x abc
2 y def
items表:
PK_ID item_name
1 Name1
2 Name2
items_suppliers 带有 外键的表:
FK_ID_items FK_ID_suppliers
1 1
2 1
我愿意:
选择一个项目并从suppliers 表中查找具有相同供应商的其他项目。
然后它应该返回“Name2”项。
[编辑]:
获取ITEM1 及其全部 suppliers 并在每个匹配的supplier 中查找下一个item 仅在之后 在每个@987654333 中查找下一个item @ 匹配。
正确的答案(感谢 @DarwinvonCorax - @ThorstenKettner 的宝贵帮助):
SELECT i2.item_name, s.supplier, s.supplier_code
FROM items i1
JOIN items_suppliers is1
ON i1.PK_ID = is1.FK_ID_items
JOIN items_suppliers is2
ON is1.FK_ID_suppliers = is2.FK_ID_suppliers
JOIN items i2
ON is2.FK_ID_items = i2.PK_ID
JOIN suppliers s
ON is1.FK_ID_suppliers = s.PK_ID
WHERE i1.item_name = 'Name1'
ORDER BY
CASE WHEN i2.item_name = 'Name1'
THEN 1
ELSE 2
END,
i2.item_name, s.supplier;
@ThorstenKettner 提出的解决方案也是正确的:
select item_name
from items
where pk_id in
(
select fk_id_items
from items_suppliers
where fk_id_suppliers in
(
select fk_id_suppliers
from items_suppliers
where fk_id_items =
(
select pk_id from items where item_name = 'Name1')
)
);
【问题讨论】:
-
不要混合隐式和显式连接语法。始终对所有表使用
join。where在join之后出现 -
我已经编辑了 SQL stmt,但它返回了所选
item的供应商,这并不奇怪......
标签: mysql sql join foreign-keys relational-database