我正在处理此查询,并且不知道如何在3个不同的表上使用内部联接,其中一个表仅与其他2个表链接。
个人查询工作正常:
SELECT sl_letter_batch,cctvpcn_run_date,cctvpcn_post_date
FROM cctvpcn_batches,statutory_letter
WHERE sl_system_ref = 1095278 and sl_letter_batch = cctvpcn_batch
ORDER BY cctvpcn_run_date
SELECT sl_letter_batch,nto_run_date,nto_post_date
FROM nto_batches,statutory_letter
WHERE sl_system_ref = 1095278 and sl_letter_batch = nto_batch
ORDER BY nto_run_date
现在,如果我想内连接相同的表:
SELECT sl_letter_batch,cctvpcn_run_date,cctvpcn_post_date
FROM cctvpcn_batches,statutory_letter
INNER JOIN nto_batches,statutory_letter and sl_letter_batch = nto_batch
and sl_letter_batch = cctvpcn_batch
WHERE sl_system_ref = 1095278
ORDER BY nto_run_date
我知道这只是尝试不同的语法错误。 因为sl_letter_batch在两个表中具有不同的值。我得到的结果是null。
sl_letter_batch cctvpcn_run_date cctvpcn_post_date
21326 2014-10-07 12:45:06.000 2014-10-07 00:00:00.000
21571 2014-11-25 14:13:55.000 2014-11-25 00:00:00.000
sl_letter_batch nto_run_date nto_post_date
21502 2014-11-13 09:06:24.000 2014-11-13 00:00:00.000
21785 2015-01-05 14:30:42.000 2015-01-05 00:00:00.000
无论如何都要编写此查询以通过连接获取两个表结果。
答案 0 :(得分:0)
试试这样:
select sl_letter_batch,cctvpcn_run_date,cctvpcn_post_date
from cctvpcn_batches inner join statutory_letter on sl_letter_batch = cctvpcn_batch
inner join nto_batches on sl_letter_batch = nto_batch
where sl_system_ref = 1095278
order by nto_run_date
修改强>
您需要有一个列,您可以使用该列加入表。像这样:
select sl_letter_batch,cctvpcn_run_date,cctvpcn_post_date
from cctvpcn_batches c inner join statutory_letters s on c.id= s.id
inner join nto_batches n on s.id= n.id
where s.sl_system_ref = 1095278
order by n.nto_run_date
答案 1 :(得分:0)
这里混合了两种sql样式 - 新旧。在旧 - 使用","
加入的2个表.. FROM cctvpcn_batches, statutory_letter WHERE ...
in new - used syntax" JOIN tableName ON id1 = id2 ..." - 这里只有一张桌子和#34; JOIN"每个"加入"单词应该匹配" ON"。
SELECT ...
FROM cctvpcn_batches
INNER JOIN statutory_letter
ON sl_letter_batch = cctvpcn_batch
INNER JOIN nto_batches
ON sl_letter_batch = nto_batch
WHERE ...
您仍然可以组合样式。
SELECT ...
FROM cctvpcn_batches, statutory_letter
INNER JOIN nto_batches
ON sl_letter_batch = nto_batch
WHERE sl_letter_batch = cctvpcn_batch
...
配对"加入......开......"也可以用作括号:
SELECT ...
FROM cctvpcn_batches
INNER JOIN nto_batches
INNER JOIN statutory_letter
ON sl_letter_batch = cctvpcn_batch
ON sl_letter_batch = nto_batch
WHERE ...
这里我们加入" nto_batches"但在此之前加入" statutory_letter"到" cctvpcn_batches"。这就是为什么有两个顺序" ON" - 首先是" statutory_letter",第二个 - 用于" nto_batches"
如果您需要 OUTER 加入(包括不匹配),那么:
SELECT ...
FROM statutory_letter
LEFT OUTER JOIN cctvpcn_batches
ON sl_letter_batch = cctvpcn_batch
LEFT OUTER JOIN nto_batches
ON sl_letter_batch = nto_batch
WHERE ...