SQL where子句加入不起作用

时间:2016-11-01 16:38:57

标签: mysql

首先道歉,因为我发现很难解释我想要做什么。

我有两个表 - 标题和签名

标题看起来像这样:

ID | Name | Description | Path     | Pnum   | DateC   | Prep | Assem |
60 | OSI  |  OSI-180    | blah.pdf | abc123 | 1/11/16 | 0    | 1     |
61 | test | test        | test.pdf | 12345  | 1/11/16 | 1    | 0     |
像这样签字:

ID | Badge | HeaderID | Recert |
24 | 204   | 60       | 0      |
25 | 201   | 60       | 1      |
26 | 201   | 61       | 0      |

签收中的HeaderID与标题中的ID相关

我想获取header.ID,header.Name,header.path,header.description,header.datec,header.prep,header.assem和signoff.Recertify。

header.ID因我有多条线而变化,但是对于这个例子我们只能说有2条; 60和61.在签收表中有2个与60(204和201)相关的徽章,1与61(201)相关。

我希望声明能够提取60和61的所有行,但我不想要任何重复的行(因此60和61只显示一次)并使用徽章相关的行(如果有更多)不止一个。例如,它会显示:

60, OSI, etc, etc, 1/11/16, 0, 1, 0 - relates to badge 204
61, test, etc, etc, 1/11/16, 1, 0, 0 - relates to badge 201

到目前为止我所拥有的是:

SELECT header.ID, header.Name , header.path , header.description , header.datec , header.prep , header.assem , header.testing , header.finish , signoff.Recertify,
from screens.header
LEFT JOIN screens.signoff ON header.ID=signoff.HeaderID
where header.ID = '60' and signoff.badge = '204'

(60和204将在运行它的代码中更改)

问题在于,如果在签收时针对该HeaderID没有204条目,那么它将不会显示。

我实际上要做的是填充表格,如果有人需要重新证明文档(在接收方中用1表示),那么它将改变该行的颜色。我在变量中有用户的徽章编号。

有人可以帮助SQL位,因为我无法弄清楚如何获取数据。

1 个答案:

答案 0 :(得分:0)

LEFT JOIN的条件应该在ON子句中

SELECT header.ID, header.Name , header.path , header.description , header.datec , header.prep , header.assem , header.testing , header.finish , signoff.Recertify,
FROM screens.header
LEFT JOIN screens.signoff 
    ON header.ID=signoff.HeaderID
    AND signoff.badge = '204'
WHERE  header.ID = '60' 

在WHERE子句中对签名设置条件意味着您正在杀死' LEFT JOIN并使它只是一个JOIN,因为你告诉MySQL只显示signoff.badge = '204'的结果,所以它只包含与签收匹配的结果。