我对SQL的了解非常基础。我现在有一个问题。
所以我有两张桌子:
Food
和Vegetables
Food
有列:name, color, price, weight
Vegetables
有列:name, color, calories, height
首先,我需要一个查询选择Vegetables
中name 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
前面添加每个结果。
所以我得到了食物的每一个结果+那些目前不在食物中的蔬菜条目。
这个查询怎么样?我希望我没有过分复杂!
由于
答案 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 * 从蔬菜名称不在(从食物中选择名称)