我有三张桌子:
bldr_prjct
,bldr_prjct_attr
,bldr_prjct_attr_ref
;
我想获取bldr_prjct数据,其中bldr_prjct属性存储在bldr_prjct_attr
中。
bldr_prjct_attr_ref
:在此表中,我定义了与项目相关的所有属性:
截图:
bldr_prjct
bldr_prjct_attr_ref
:
bldr_prjct_attr
:
我的查询:
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)
答案 0 :(得分:0)
我可能会遗漏某些内容,但您的表格似乎没有任何共同参考。例如,表bldr_prjct_attr_ref
不包含指向表bldr_prjct
中相关记录的任何字段。如果我的理解是正确的,您将不得不改变这些表以允许一些时间的交叉引用。例如,向表bldr_prjct_attr_ref
添加一个字段(列)bldr_prjct_ID
,该字段指向表bldr_prjct
中的相应记录。
第三个表中有一个字段出现以引用第一个中的记录,但是当您发出三个表的SELECT并且其中一个表返回空结果时,则整个select返回空。
答案 1 :(得分:0)
首先,不要使用隐式JOIN
语法(逗号分隔),使用正确的连接语法,这将有助于避免这种错误。
您的查询无效,因为您错过了联接关系,您可能需要稍微调整一下,我猜测bldr_prjct
已bldr_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()