MYSQL选择所有不相等的东西

时间:2016-04-27 20:07:00

标签: mysql

我对一个方程式有点困难,我似乎无法弄清楚或找到这里。我正在努力做到以下几点;

我有2张桌子,产品和teamproducts。有外键是生产的。我正在尝试从product表中选择尚未注册到teamproducts表的产品。我也在使用teamproducts中的团队代码。以下示例;

产品表(productid | productname)

1001 |产品1

1002 |产品2

1003 |产品3

1004 |产品4

1005 |产品5

teamproducts表(teamcode | productid)

teamcode1 | 1001

teamcode1 | 1002

我想要做的是选择所有不在teamproducts页面中的产品(所以在这个例子中产品3及其上)

我尝试了以下内容;

    SELECT productname FROM products p, teamproducts tp WHERE teamcode = teamcode1 AND p.productid != tp.productid

和我见过的其他变化,但没有提出正确的路线。请帮忙。

4 个答案:

答案 0 :(得分:1)

未经测试,但我认为这应该可以胜任。

SELECT products.productname
FROM products
LEFT JOIN teamproducts
  ON teamproducts.teamcode = 'teamcode1'
  AND teamproducts.productid = products.productid
WHERE teamproducts.productid IS NULL;

答案 1 :(得分:0)

你要找的是LEFT JOIN,有一个额外的条件可以消除右表中的空结果:

SELECT * FROM products 
LEFT JOIN teamproducts USING (productid) 
WHERE teamproducts.productid IS NULL; -- Add other conditions as needed

编辑添加' teamcode'条件:

SELECT * FROM products 
LEFT JOIN teamproducts USING (productid) 
WHERE teamproducts.productid IS NULL 
AND teamproducts.teamcode = 'teamcode1'; -- Add other conditions as needed

有关JOIN及其不同类型的更多信息:http://dev.mysql.com/doc/refman/5.7/en/join.html

答案 2 :(得分:0)

我认为你必须在引号之间写teamcode1。 像这样:

SELECT productname FROM products p, teamproducts tp WHERE teamcode = 'teamcode1' AND p.productid != tp.productid

答案 3 :(得分:0)

您可以使用not in子句

select * from products
where id not in (select productid from teamproduct);