在INNER JOIN中使用AND

时间:2017-08-31 17:47:55

标签: sql inner-join

我相当新,SQL希望了解下面的逻辑。

SELECT *
FROM Table A A1 
INNER JOIN TABLE B B1 ON B1.ID = A1.ID AND A1 = 'TASK';

不确定这是否是一个明确的细节,但请告诉我。谢谢!

3 个答案:

答案 0 :(得分:3)

SELECT * - 选择所有列

FROM TABLE A A1 - 来自表A.A1就像你给表A的昵称。而不是输入A.ColumnName(A可能是一个很长的名字)你只需输入A1 .ColumnName

INNER JOIN表B B1 - 您正在加入表A和B.同样,B1只是一个昵称。这是一个很好的图片解释连接。enter image description here

ON B1.ID = A1.ID - 这是2个表共有的列(关系列)这些列需要包含相同的数据。

AND A1 =' TASK' - 这就是说你要加入A1 tablename

答案 1 :(得分:3)

SELECT *
FROM Table A A1
    INNER JOIN TABLE B B1 ON B1.ID = A1.ID AND A1.Column = 'TASK'

相同
SELECT *
FROM Table A A1
    INNER JOIN TABLE B B1 ON B1.ID = A1.ID
WHERE A1.Column = 'TASK'

它甚至是相同的性能,它只是编写查询的另一种方式。在非常大的查询中,直接在AND上使用INNER JOIN而不是在WHERE部分中“隐藏”它会更具可读性。

答案 2 :(得分:2)

这根本不会运行

SELECT *
FROM Table A A1 INNER JOIN
     TABLE B B1 
     ON B1.ID = A1.ID AND A1 = 'TASK';

这将运行,因为我添加了一个列名(SomeColumn):

SELECT *
FROM Table A A1 INNER JOIN
     TABLE B B1 
     ON B1.ID = A1.ID AND A1.SomeColumn = 'TASK';

与此相同

SELECT *
FROM Table A A1 INNER JOIN
     TABLE B B1 
     ON B1.ID = A1.ID 
WHERE A1.SomeCoumn = 'TASK';

每当你加入一个常量时,它几乎与向where子句添加一个额外的标准一样。加入连接的唯一原因是代码清晰。