我有两张桌子,其中一张桌子看起来像这样(例子):
tbl1
-------------
id int PK
name string
另一个看起来像:
tbl2
-------------
type int PK FK (tbl1.id)
langid int PK
content string
所以我想要的是:我希望将来自tbl1的所有行与来自tbl2的结果连接在一起。但我不想要的是每个langid都会为连接添加一个结果。因此,如果tbl1包含此数据:
id: 1, name: test1
id: 2, name: test2
tbl2包含这些数据:
type: 1, langid: 1, content: testcontent
type: 1, langid: 2, content: testcontent2
type: 2, langid: 3, content: testcontent3
我只想要以下数据:
tbl1.id: 1, tbl1.name: test1, tbl2.type: 1, tbl2.langid: 1, tbl2.content: testcontent
tbl1.id: 2, tbl1.name: test2, tbl2.type: 2, tbl2.langid: 3, tbl2.content: testcontent3
所以它必须得到一个结果与存在的langid。希望我解释得很好。我试过这个:
SELECT * FROM `tbl1` INNER JOIN `tbl2` ON (`tbl1`.`id` = `tbl2`.`type`) WHERE `tbl2`.`langid` = 1
但有时langid 1不存在,只有langid 2被那个标题所占据。我需要从tbl2获得tbl1行和一个结果。
答案 0 :(得分:1)
原始提交(只是得到第一反应......但那不是你想要的......)
SELECT * FROM `tbl1` INNER JOIN `tbl2` ON (`tbl1`.`id` = `tbl2`.`type`) WHERE 1 LIMIT 1
更新 - 我认为这就是你想要的。这适用于SQLfiddle
select *
FROM `tbl1` INNER JOIN `tbl2`
ON ( `tbl1`.`id` = `tbl2`.`type`)
Group by tbl1.id
回应:
id name type langid content
1 test1 1 1 content1
2 test2 2 3 content3
答案 1 :(得分:0)
我认为你想要一个LEFT JOIN
,条件在连接条件的另一个表上:
SELECT *
FROM `tbl1`
LEFT JOIN `tbl2` ON `tbl1`.`id` = `tbl2`.`type`
AND `tbl2`.`langid` = 1
这将为每个tbl1的每一行提供一次,只有tbl2中的数据与langid 1一起存在。