一对多关系MySQL - 只获得一个多记录

时间:2015-10-30 08:31:33

标签: mysql

我有两张桌子,其中一张桌子看起来像这样(例子):

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行和一个结果。

2 个答案:

答案 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一起存在。