-2

我有两个表产品表和状态表

并且有 1 ton n 关系

Product table
----------------------
id    | product
1           XYZ
2           ABC
3           HJK
4           PQR
5           SWE

----------------------

status_table
--------------------------------
id  | col1 | col2 | priduct_id
2      s1     ss1      2
3      s2     xs1      3   
5      s1     ss1      3          
4      s1     xs1      4
4      s3     xs2      4
4      s2     ss2      4
4      s3     xs2      4                 
5      ww     sw2      5                   
-------------------------------------

我想选择所有状态不等于 = S3 的产品

我试过这个

select product_Table.product from product_Table
inner join status_table on 
product_table.id = status_table.id
where status_table.col1 <> 's3'
4

5 回答 5

1

一个简单的LEFT JOIN应该做到这一点,它将status_table中的行s3与每个产品的状态匹配,如果不存在匹配的状态,则返回产品;

SELECT DISTINCT p.id, p.product
FROM product_table p
LEFT JOIN status_table s
  ON p.id = s.product_id
 AND s.col1 = 's3'
WHERE s.id IS NULL
于 2013-08-12T04:52:08.817 回答
0

尝试:

SELECT P.id, Product, col1
FROM Product P
INNER JOIN status_table S
ON P.id = S.product_id
WHERE S.col1 <> 's3'
于 2013-08-12T04:55:05.403 回答
0

尝试这个:

select product_Table.product from product_Table
inner join status_table on 
product_table.id = status_table.id
where 
status_table.col1 <> 's3'
group by 
product_Table.product

请查看我的演示

于 2013-08-12T04:55:08.487 回答
0

您的表格设计(命名等)有很多不一致之处,但无论如何,您是否尝试过以下内容:

SELECT *
FROM Product
WHERE id NOT IN
 ( SELECT priduct_id
   FROM status_table
   WHERE col1 <> 'S3');
于 2013-08-12T04:52:58.963 回答
0

如果您不介意退回没有状态关联的产品(如“XYZ”),试试这个

SELECT p.id, p.product FROM Product p
WHERE NOT EXISTS (
    SELECT 1 FROM status_table s
    WHERE s.priduct_id = p.id
    AND s.col1 = 's3'
)
于 2013-08-12T05:09:27.300 回答