如何使用联合查询

时间:2014-09-24 10:22:45

标签: sql-server tsql

我有这样的样本数据:

表: SuratKeluar

==========================================
Id   NoSuratKeluar   Perihal   TglSurat 
==========================================
a1      111           dataA   20-09-2014
a2      222           dataB   20-09-2014
a3      333           dataC   21-09-2004
a4      444           dataD   21-09-2004

表: SuratKeluarPermission

==================================
Id   IdSuratKeluar   KodeJabatan
==================================
1        a1            0001
2        a1            0002
3        a3            0001
4        a4            0001

我希望SuratKeluar显示来自SuratKeluarPermission的数据:

where KodeJabatan='0001'

所需的输出如下所示:

==========================================
Id   NoSuratKeluar   Perihal   TglSurat 
==========================================
a1      111           dataA   20-09-2014
a3      333           dataC   21-09-2004
a4      444           dataD   21-09-2004

4 个答案:

答案 0 :(得分:2)

您不需要UNION,需要JOIN。试试这个:

SELECT SuratKeluar.Id, SuratKeluar.NoSuratKeluar, SuratKeluar.Perihal, SuratKeluar.TglSurat
FROM SuratKeluar
JOIN SuratKeluarPermission 
    ON SuratKeluar.Id = SuratKeluarPermission.IdSuratKeluar
WHERE SuratKeluarPermission.KodeJabatan = '0001'

答案 1 :(得分:0)

这里不能使用union,因为这两个表之间的列数和数据类型不相同。我们可以使用join来获得预期的结果,希望下面的查询应该提供结果:

SELECT
   SK.Id,
   SK.NoSuratKeluar,
   SK.Perihal, 
  SK.TglSurat 
FROM
   SuratKeluar AS SK INNER JOIN SuratKeluarPermission AS SKP 
   ON SK.ID = SKP.IdSuratKeluar 
WHERE
   SKP.KodeJabatan='0001';

答案 2 :(得分:0)

可以使用INNER JOIN实现此目的。

<强> QUERY

SELECT a.Id,a.NoSuratKeluar,a.Perihal,a.TglSurat
FROM SuratKeluar a
JOIN SuratKeluarPermission b
ON a.Id=b.IdSuratKeluar
WHERE b.KodeJabatan='0001';

FIDDLE DEMO

答案 3 :(得分:0)

我建议使用子查询

过滤Id
select * from SuratKeluar
where Id in (
  select IdSuratKeluar from SuratKeluarPermission
  where KodeJabatan='0001');

或按exists声明

过滤
select * from SuratKeluar t
where exists (
  select * from SuratKeluarPermission
  where KodeJabatan='0001'
  and IdSuratKeluar=t.Id);