gpt4 book ai didi

sql - SQLite INNER JOIN 中的 "ambiguous column name"

转载 作者:IT王子 更新时间:2023-10-29 06:27:50 24 4
gpt4 key购买 nike

我在 SQLite 数据库中有两个表,INVITEM 和 SHOPITEM。他们的共享属性是 ItemId,我想执行 INNER JOIN。这是查询:

    SELECT  INVITEM.CharId AS CharId, 
INVITEM.ItemId AS ItemId
FROM (INVITEM as INVITEM
INNER JOIN SHOPITEM AS SHOPITEM
ON SHOPITEM.ItemId = INVITEM.ItemId)
WHERE ItemId = 3;

SQLite 不喜欢它:

SQL error: ambiguous column name: ItemId

如果我编写 WHERE INVITEM.ItemId = 3,错误就会消失,但由于 WHERE 条件或多或少是用户指定的,我宁愿让它工作而不必指定表。 NATURAL JOIN 似乎解决了这个问题,但我不确定该解决方案是否足够通用(即我可以在这种情况下使用,但我不确定我是否可以在所有情况下使用)

任何可以解决问题的备用 SQL 语法?

最佳答案

我会这样写这个查询:

SELECT i.CharId AS CharId, i.ItemId AS ItemId 
FROM INVITEM as i INNER JOIN SHOPITEM AS s USING (ItemId)
WHERE i.ItemId = 3;

我正在使用 USING (ItemId) 语法,这只是个人喜好问题。它等同于 ON (i.ItemID = s.ItemID)

但我通过在 WHERE 子句中限定 i.ItemID 解决了歧义。您会认为这是不必要的,因为 i.ItemID = s.ItemID。它们在交换性上是相等的,所以没有语义歧义。但显然 SQLite 不够聪明,无法知道这一点。

我不喜欢使用NATURAL JOIN。它等同于对存在于两个表中且名称相同的每个 列进行等值连接。我不喜欢使用它,因为我不希望它比较我不希望它比较的列,仅仅是因为它们具有相同的名称。

关于sql - SQLite INNER JOIN 中的 "ambiguous column name",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/555246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com