mysql检查另一个表中是否存在字段值

时间:2014-12-24 10:45:56

标签: mysql union

表产品

ProductID   | ProductCode  | SampleRefNum
1              a1
2                             b2
3                             c2

表库存清单

  StockListID   | ProductCode  | SampleRefNum  | QTY
    1              a1                            10
    2                             b2             10
    3                             j100           25

我要2张桌子。产品表是网站上的当前产品。 库存清单表是从POS系统上传的清单,包含产品及其数量。 产品具有ProductCode或SampleRefNum。

我正在尝试生成产品表中所有项目的列表,这些项目在库存清单表格中没有匹配的ProductCode或SampleRefNum。在下面的例子中,查询应返回ProductID 3。

我正在尝试使用查询来执行此操作,而不是在PHP中循环和检查结果。

5 个答案:

答案 0 :(得分:1)

尝试加入这两个表,并从TPOCK_LIST获取ProductCode或SampleRefNum为空的产品

select t1.* from PRODUCTS as t1 
left join STOCK_LIST as t2 on t1.ProductID = t2.StockListID
where (t2.ProductCode IS NULL or t2.SampleRefNum is NULL)

答案 1 :(得分:1)

您可以使用左连接来更正结果。

SELECT p.* FROM products AS p
LEFT JOIN stockList AS s
ON p.productID = s.stockListId
OR p.sampleRefNum = s.sampleRefNum;

答案 2 :(得分:0)

Select productId from Products where productId NOT IN(Select p.productId From Products p
INNER JOIN Stocklist s ON ( p.ProductCode=s.ProductCode || p.SampleRefNum=s.SampleRefNum));

我猜productId和Stocklist Id彼此无关,它们只是两个不同表的主键。

请尝试以上查询。

如果我猜错了,请详细说明。

答案 3 :(得分:0)

select table1.id table2.id from table1,table2 where tpl1.id=tpl2.id

之后检查返回数据的num_rows,如果total为0则表示没有东西

答案 4 :(得分:0)

这是正确的答案。它是@Ye Win和웃웃웃웃웃

的一部分
SELECT * FROM products AS p
LEFT JOIN stock_list AS s
ON p.ProductCode = s.ProductCode OR p.SampleRefNum = s.SampleRefNum
WHERE (s.ProductCode IS NULL AND p.ProductCode IS NOT NULL OR s.SampleRefNum IS NULL AND p.SampleRefNum IS NOT NULL)