如何选择,然后在其上添加一个完整的表?

时间:2017-09-14 12:16:02

标签: sql sql-server

我对SQL的了解非常基础。我现在有一个问题。

所以我有两张桌子: FoodVegetables

Food有列:name, color, price, weight
Vegetables有列:name, color, calories, height

首先,我需要一个查询选择Vegetablesname of Vegetable NOT EXISTS Food.name Column中所有条目。

我对此查询有点了解:

SELECT *
FROM Vegetables AS v
LEFT JOIN Food AS f
ON f.name = v.name
WHERE f.name IS NULL

好的,所以这给了我一份目前不在Food的所有蔬菜的清单(当根据名字进行搜索时)。

现在我需要在SELECT * FROM Food前面添加每个结果。 所以我得到了食物的每一个结果+那些目前不在食物中的蔬菜条目。

这个查询怎么样?我希望我没有过分复杂!

由于

3 个答案:

答案 0 :(得分:1)

您可以使用union all

select f.name
from food f
union all
select v.name
from vegetables v
where not exists (select 1 from food f where f.name = v.name);

如果您想先有效匹配,那么:

select fv.*
from (select f.name, 1 as ordering
      from food f
      union all
      select v.name, 2
      from vegetables v
      where not exists (select 1 from food f where f.name = v.name)
     ) fv
order by ordering;

如果您知道这些表具有相同类型的相同列,则只使用select *

答案 1 :(得分:1)

所以有蔬菜不被认为是食物吗?好的......

如果仅仅是名字,那么所有食物加上所有其他蔬菜只是两者的结合。

split(out, 1:nrow(out))

$`1`
     Var1 Freq
1 1,1,135    2

$`2`
    Var1 Freq
2 1,2,96    1

$`3`
     Var1 Freq
3 1,3,120    1

如果您需要食物之前非食用蔬菜,那么您需要排名:

SELECT name FROM vegetables 
UNION
SELECT name FROM food;

答案 2 :(得分:0)

SELECT * 从蔬菜名称不在(从食物中选择名称)