我有两张桌子,他们是:
---------ATRIB---------
ITEMID NAMEOFTHEATTRIBUTE VALUE
100001 Length 5
100001 Height 6
-------TECHDATA--------
ITEMID NAMEOFTHEATTRIBUTE VALUE
100001 Length
100001 Height
100001 Weight
情况: 用户创建一个表ATRIB并希望用相应的值更新表TECHDATA,但是他只有长度和高度的值,尽管他需要输入TECHDATA表中的所有值。
我想检查TECHdata中存在的所有值是否都存在于ATRIB表中。我试过这个:
select ITEMID,NAMEOFTHEATTRIBUTE,VALUE
from atrib a
inner join TECHDATA b on a.itemid = b.itemid
left join TECHDATA c on a.NAMEOFTHEATTRIBUTE = c.NAMEOFTHEATTRIBUTE
但是这会产生语法错误,也尝试了左连接,但仍然无法得到我想要的结果,也许你们有什么建议吗?
答案 0 :(得分:0)
看起来你有一个模糊的列名。当不同表中存在具有相同名称的列时,会发生不明确的列名称。在这种情况下,在Techdata
和Attrib
列之间。
此查询假设您不介意重复项。
SELECT a.ITEMID,a.NAMEOFTHEATTRIBUTE,a.VALUE
FROM ((atrib AS a
INNER JOIN TECHDATA AS b on a.itemid = b.itemid)
LEFT JOIN TECHDATA AS c on a.NAMEOFTHEATTRIBUTE = c.NAMEOFTHEATTRIBUTE)
答案 1 :(得分:0)
您似乎正在尝试从WAS提供的内容中获得符合条件的资格。这可以通过执行LEFT-JOIN并获取仍然缺失的记录来解决,以通知用户。从给定ItemID的所有数据开始,然后与ATRIB
进行比较select
td.NameOfTheAttribute
from
techdata td
LEFT JOIN Atrib a
on td.itemID = a.itemID
where
td.itemID = 1000001
AND a.itemid IS NULL
您知道此人正在尝试查找的ID,因此请将该ID专门放在where子句中。然后,通过将AND ... IS NULL包含到WHERE中,它将仅返回那些没有为填充提供的值的技术数据记录。然后,您可以根据返回的NameOfTheAttribute显示用户。如果没有返回任何记录,那么所有部分都已填入,您可以继续实际的SQL-Update过程。
如果用户创建的属性表可以有多个itemID,那么我会略微修改查询以适应。