我有两张桌子
item
confirmmasterdetail
我想从item表中选择不在confirmmasterdetail表中的记录 当我运行此查询时,它返回空结果集。
SELECT itemId
, itemName
FROM item
LEFT
JOIN item /* HERE AN ALIAS IS MISSING, ITEM occurs twice. */
ON item.itemId = confirmmasterdetail.itemId
WHERE confirmmasterdetail.itemId
NOT IN
( SELECT confirmmasterdetail.itemId
FROM confirmmasterdetail
)
AND confirmMasterId = ".$_REQUEST['confirmMasterId'];
答案 0 :(得分:1)
查看您的查询。请为使用任一表名选择的所有列添加前缀,或者(更好)为每个表添加别名并使用该表。另请注意,item
在查询中出现两次,因此列名可能与它们看起来不同。
最后,确保无法从子选择中返回null
。
答案 1 :(得分:0)
我相信你的查询有SQL的基本概念问题。如果没有明确说明你想要什么以及表格是什么样的话,很难给出建议。为了帮助您,我们至少需要有关表格的信息(列和它们是如何连接的)。
修改:根据您提供的信息,您可能想尝试其中一种查询:
选择confirmmasterdetail中没有相应条目的所有项目:
SELECT itemId
, itemName
FROM item
WHERE item.itemId
NOT IN
( SELECT confirmmasterdetail.itemId
FROM confirmmasterdetail
);
使用给定的confirmMasterId选择confirmmasterdetail中没有条目的所有项目:
SELECT itemId
, itemName
FROM item
WHERE item.itemId
NOT IN
( SELECT confirmmasterdetail.itemId
FROM confirmmasterdetail
WHERE confirmMasterId = ".$_REQUEST['confirmMasterId']
);
答案 2 :(得分:0)
SQL中null
有一个重要的事情,它意味着unknown
而不是nothing
。因此,如果您的子查询返回null
值,则表示unknown
,而not in unknown
会使DBMS忽略所有记录。
只需将子查询更改为:
SELECT confirmmasterdetail.itemId
FROM confirmmasterdetail
WHERE confirmmasterdetail.itemId is not null
答案 3 :(得分:0)
尝试此查询 -
SELECT
i.*
FROM item i
LEFT JOIN confirmmasterdetail c
ON i.itemId = c.itemId
WHERE
c.itemId IS NULL