Sql内部联接查询

问题描述:

我正在处理这个查询,只是不知道如何在3个不同的表上使用内部联接,其中一个表只与其他2个表链接。Sql内部联接查询

个别查询做工精细:

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在两个表中具有不同的值。我得到的结果是空的。

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

哪些DBMS是你使用? Postgres的?甲骨文? – 2015-03-31 16:36:49

+0

SQL服务器mgmt工作室 – pretyv5 2015-03-31 16:41:08

+0

可能重复[SQL内部连接3表?](http://*.com/questions/10195451/sql-inner-join-with-3-tables) – 2015-03-31 19:20:28

这里混合2 sql样式 - 新旧。在老 - 使用语法‘JOIN表名ON ID1 = ID2 ......’ - - 使用“”

.. FROM cctvpcn_batches, statutory_letter WHERE ... 
在新

2个表连接只在这里每一个表的‘加盟’,每个‘JOIN’字应该有匹配“开”。

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 
     ... 

对 “加入... ON ...” 可以奥斯陆被用作支架:

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 ... 
+0

谢谢parfilko ..左外连接解决了我的问题.... – pretyv5 2015-04-01 07:40:36

尝试这样的:

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 
+0

拉胡尔,这就是我什么提到sl_letter_batch具有不同的值,如果你看到我的结果,它将结果为空值。 – pretyv5 2015-03-31 16:35:20

+0

@ pretyv5: - 你有任何id列可以加入两张表吗? – 2015-03-31 16:35:56

+0

statutory_letter表对于两个表都是常见的,sl_letter是两个表的id列。我不知道这是一个愚蠢的问题,或者我想到了... – pretyv5 2015-03-31 16:40:09