我有两个表Customer_Foods
和Food_Options
。Customer_Foods
在某些列中包含空白值。我试图找出Customer_Foods
的给定行中哪些值从Food_Options
的值列表中缺失。最后,我想用第二个表中的选项填充Customer_Foods
表的空白处,而不重复每个ID的选项。Customer_Foods
:
| ID|食品1|食品2|食品3|食品4|
| --------------|--------------|--------------|--------------|--------------|
| 一一一|苹果|空白|梨|樱桃|
| 一百一十二|苹果|香蕉|橙子|空白|
| 一百一十三|橙子|樱桃|空白|空白|Food_Options
:
| 食品|
| --------------|
| 苹果|
| 樱桃|
| 香蕉|
| 橙子|
| 梨|
我一直在尝试使用这个NOT IN查询,但却被如何从Customer_Foods
表的一行中收集可比较的值列表以与Food_Options
表的单个列进行比较所难倒
SELECT *
FROM Food_Options
WHERE Foods NOT IN (SELECT *
FROM Customer_Foods
WHERE ID = 113)
如果我列出一个列名(即Food 1)子查询,它就可以工作,但我不知道如何一次在所有Customer_Foods
列中执行此操作。
SELECT *
FROM Food_Options
WHERE Foods NOT IN (SELECT Food1
FROM Customer_Foods
WHERE ID = 113)
1条答案
按热度按时间blmhpbnm1#
您需要选择子查询中的所有food列,使用
union all
和CTE,您可以将查询修改为:如果你的DBMS支持unpivot功能(如SQL Server),你可以使用它来代替union。
要从
Food_Options
表中获取一行空白食物列被缺失的食物值替换,请尝试以下操作:ID=113的输出:
demo