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
有无论如何写这个查询来获得两个表结果加入。
这里混合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 ...
谢谢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
哪些DBMS是你使用? Postgres的?甲骨文? – 2015-03-31 16:36:49
SQL服务器mgmt工作室 – pretyv5 2015-03-31 16:41:08
可能重复[SQL内部连接3表?](http://*.com/questions/10195451/sql-inner-join-with-3-tables) – 2015-03-31 19:20:28