我有4张桌子:
Table Pizzas Table Burgers
------------------------------- --------------------------------
id item pizza_id restaurant id item burger_id restaurant
-- ------ -------- ---------- -- ------ --------- ----------
1 cheese 2 14 1 cheese 32 14
... ...
Table Restaurant Table Items
-------------------------------- --------------------------------
id name id name price
-- ----------------------------- -- ------ -----
14 Los Pollos Hermanos 1 cheese 2
... 2 oyster 4
...
我想选择(在Microsoft Access中)特定items
使用的所有restaurant
。
所以我写了这个:
SELECT * FROM (((Items
LEFT JOIN Burgers
ON Items.name = Burgers.name)
LEFT JOIN Pizzas
ON Items.name = Pizzas.name)
LEFT JOIN Restaurant
ON
Restaurant.id = Burgers.restaurant AND
Restaurant.id = Pizzas.restaurant)
WHERE
Restaurant.name LIKE 'Los Pollos Hermanos'
ORDER BY
Items.id
ASC
问题是我得到很多时间相同的条目,查询需要5分钟才能执行。如果我添加SELECT DISTINCT
关键字,我就无法获得所需的所有条目。
我该如何编写这样的SQL查询?
答案 0 :(得分:1)
您可以使用UNION
在两个单独查询的结果之间执行此操作。 UNION
操作返回两个结果集的并集,清除重复项(UNION ALL
是相同的但没有后一步骤。)
select id, item
from Pizzas t1
join Restaurant t2
on t1.restaurant = t2.id
where t2.name = 'Los Pollos Hermanos'
union
select id, item
from Burgers t1
join Restaurant t2
on t1.restaurant = t2.id
where t2.name = 'Los Pollos Hermanos'
如果您想订购此最终结果,则必须在此查询之外进行
select id, item
from (
select id, item
from Pizzas t1
join Restaurant t2
on t1.restaurant = t2.id
where t2.name = 'Los Pollos Hermanos'
union
select id, item
from Burgers t1
join Restaurant t2
on t1.restaurant = t2.id
where t2.name = 'Los Pollos Hermanos'
)
order by id
请注意,在您的示例中,您不需要join
Items
,因为您已经拥有Pizzas
和Burgers
表中所需的一切。