如何使用Mysql从多个表中搜索数据?

时间:2016-05-17 08:49:19

标签: mysql

我有三张桌子: bldr_prjctbldr_prjct_attrbldr_prjct_attr_ref;

我想获取bldr_prjct数据,其中bldr_prjct属性存储在bldr_prjct_attr中。 bldr_prjct_attr_ref:在此表中,我定义了与项目相关的所有属性:

截图: bldr_prjct

enter image description here

bldr_prjct_attr_ref

enter image description here

bldr_prjct_attr

enter image description here

我的查询:

SELECT 
    `p`.`ID`,`p`.`PRJCT_NM`,`p`.`SLUG`,`p`.`STS_CD`,
    `p`.`PRJCT_GEO_LT`,`p`.`PRJCT_GEO_LG` 
FROM 
    `bldr_prjct` `p`, `bldr_prjct_attr_ref` `pr`, `bldr_prjct_attr` `pa` 
WHERE 
    `pa`.`REF_ID` IN (SELECT `ID` FROM `bldr_prjct_attr_ref` WHERE `PRNT_ID`=3)

2 个答案:

答案 0 :(得分:0)

我可能会遗漏某些内容,但您的表格似乎没有任何共同参考。例如,表bldr_prjct_attr_ref不包含指向表bldr_prjct中相关记录的任何字段。如果我的理解是正确的,您将不得不改变这些表以允许一些时间的交叉引用。例如,向表bldr_prjct_attr_ref添加一个字段(列)bldr_prjct_ID,该字段指向表bldr_prjct中的相应记录。 第三个表中有一个字段出现以引用第一个中的记录,但是当您发出三个表的SELECT并且其中一个表返回空结果时,则整个select返回空。

答案 1 :(得分:0)

首先,不要使用隐式JOIN语法(逗号分隔),使用正确的连接语法,这将有助于避免这种错误。

您的查询无效,因为您错过了联接关系,您可能需要稍微调整一下,我猜测bldr_prjctbldr_prjct_attr_ref id=prnt_id加入SELECT `p`.`ID`,`p`.`PRJCT_NM`,`p`.`SLUG`,`p`.`STS_CD`,`p`.`PRJCT_GEO_LT`,`p`.`PRJCT_GEO_LG` FROM `bldr_prjct` `p` INNER JOIN `bldr_prjct_attr` `pa` ON(`p`.id = `pa`.prnt_id ) INNER JOIN `bldr_prjct_attr_ref` `pr` ON(`pa`.ref_id = `pr`.id and `pr`.prnt_id = 3 ) ,尽管您有prnt_id此表中的列,如果需要,请进行更改。

jQuery.Deferred()