如何选择不同表中使用的不同事件

时间:2017-04-26 08:49:56

标签: sql ms-access select

我有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查询?

1 个答案:

答案 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,因为您已经拥有PizzasBurgers表中所需的一切。