从两个表中检索数据但排除某些数据

时间:2014-02-07 14:33:29

标签: mysql sql inner-join

我有2张桌子,请考虑以下内容。

文章

ART_ID
ART_NAME

交易

TRA_ID
ART_ID (FK)
TRA_STATUS

我需要Articles和& Transaction但是对于来自Transaction的数据,TRA_STATUS应该等于'A'

以下是我已经尝试的查询

SELECT  ART_NAME 
FROM Articles
INNER JOIN Transaction ON Transaction.ART_ID = Articles.ART_ID
WHERE TRA_STATUS='A'

我已经尝试过一个outter join来从两个表中获取数据,但我似乎没有最后一个过滤器,其中TRA_STATUS应该等于'A',如果我只是添加一个where条件它将从Articles中删除数据好。

3 个答案:

答案 0 :(得分:2)

我猜你想要查看文章中的所有行,但只查看来自事务的匹配行。

如果是这种情况,则过滤器必须是加入的条件

SELECT  
  a.ART_ID, 
  a.ART_NAME,
  t.TRA_ID,
  t.TRA_STATUS 
FROM 
  Articles a
LEFT JOIN Transaction t ON t.ART_ID = a.ART_ID AND t.TRA_STATUS LIKE 'A'

如果在WHERE子句中进行过滤,则LEFT JOIN实际上变为INNER JOIN。

答案 1 :(得分:0)

SELECT  Articles.ART_ID, ART_NAME,TRA_ID,TRA_STATUS 
FROM Articles
INNER JOIN `Transaction` ON `Transaction`.ART_ID = Articles.ART_ID
WHERE TRA_STATUS = 'A';

交易是保留字词。重命名表格或确保使用`。

不要搞砸它

答案 2 :(得分:0)

SELECT *
FROM Articles
INNER JOIN Transaction ON Articles.ART_ID = Transaction.ART_ID
WHERE Transaction.TRA_STATUS = 'A'