2016-05-17 155 views
0

我有三個表: bldr_prjctbldr_prjct_attrbldr_prjct_attr_ref;如何使用Mysql從多個表中搜索數據?

我想在那裏bldr_prjct屬性存儲在bldr_prjct_attr bldr_prjct數據。 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) 
+0

看看這個,這應該會給你一些想法。 http://stackoverflow.com/questions/10023371/how-can-i-select-data-from-multiple-mysql-tables-in-this-scenario?rq=1 – piyushj

+0

請在[這裏]看看(HTTP:/ /stackoverflow.com/questions/905379/what-is-the-difference-between-join-andunion) –

+0

沒有屏幕截圖,謝謝。提供適當的DDL – Strawberry

回答

0

首先,不要使用隱含的JOIN語法(逗號分隔),使用正確的連接語法,這將幫助您避免這種錯誤。

您查詢是不工作,因爲你缺少的連接關係,你可能需要調整它一下,我猜bldr_prjctid=prnt_id加入到bldr_prjct_attr_ref雖然你已經在這個表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) 
+0

這個查詢正在工作,但有一些問題,我在'bldr_prjct_attr'中有兩行同樣的ref_id,然後它給第一行兩次。 –

+0

''bldr_prjct接合到'bldr_prjct_attr'和'bldr_prjct_attr'接合到'bldr_prjct_attr_ref'。 –

+0

那麼?兩行有什麼問題?它的重複行,E.G.所有的列都一樣嗎? @ManishTiwari – sagi

0

我可能失去了一些東西,但你的表似乎沒有任何共同的參考。例如,表bldr_prjct_attr_ref不包含指向表bldr_prjct中相關記錄的任何字段。如果我的理解是正確的,你將不得不改變這些表格以允許一段時間的交叉引用。例如,添加到表bldr_prjct_attr_ref一個字段(列)bldr_prjct_ID指向在表bldr_prjct的相應記錄。 存在這樣出現在第一個引用記錄的第三表中的一個領域,但是當你發出三張表的SELECT,其中一人返回一個空的結果,則整個select返回空。