2016-05-17 12 views
0

私は3つのテーブルを持っています: bldr_prjctbldr_prjct_attrbldr_prjct_attr_ref;Mysqlを使って複数のテーブルからデータを検索するには?

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) 
+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-and-union) –

+0

スクリーンショットなし、ありがとうございます。適切なDDLを提供する – Strawberry

答えて

0

まず、暗黙的なJOIN構文(カンマ区切り)を使用しないで、この種の間違いを避けるのに役立つjoinという適切な構文を使用してください。あなたが参加する関係が欠落しているので、

あなたのクエリが動作していない、あなたはそれを少し調整する必要があり、私はbldr_prjctを推測しますが、この表の列をprnt_idているがid=prnt_idによってbldr_prjct_attr_refに参加し、その必要に応じてそれを変更しています。

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を持つ2つの行があり、最初の行に2つの時間が与えられます。 –

+0

'bldr_prjct'は 'bldr_prjct_attr'に結合され、 'bldr_prjct_attr'は' bldr_prjct_attr_ref'に結合されます。 –

+0

だから? 2行の問題は何ですか?その重複列、E.G.すべての列が同じですか? @ManishTiwari – sagi

0

私は何かが欠けているかもしれないが、あなたのテーブルには、任意の共通の基準を持っているように見えません。たとえば、テーブルbldr_prjct_attr_refにはテーブルbldr_prjctの関連するレコードを指すフィールドは含まれません。私の理解が正しい場合は、これらのテーブルを変更して相互参照の時間を許す必要があります。たとえば、表bldr_prjctの対応するレコードを指しているフィールド(列)bldr_prjct_IDをテーブルbldr_prjct_attr_refに追加します。 3つ目のテーブルに1つのフィールドがあり、が最初のレコードを参照するのにと表示されますが、3つのテーブルのSELECTを発行し、そのうちの1つが空の結果を返した場合、

関連する問題