2016-04-06 5 views
0

は、私は3つのテーブルがあるとし、左側のテーブルのすべての行との声明に参加しますだから私はフィールドのすべての行を持っているたびに、プロジェクトXがいくつかのフィールドのデータを持っていない場合は、空の行を返します。MySQLは

私は、次のSQL文を試してみました:

SELECT * FROM field as f 
left data as d on f.ID = d.f_id 
WHERE d.p_id = 'X' 

これは、Xは、いくつかのデータを持っており、データが存在しない場合は、空の行を返さないプロジェクト行のみが返されます。

私も試してみました:

SELECT * FROM field as f 
left join data as d on f.ID = d.f_id 
left join project as p on p.ID = d.p_id 

この意志がフィールドからすべての行を返すだけでなく、他のプロジェクトのデータを返し、プロジェクトはデータがない場合は声明のは、空の行を返さない場合は病気を追加した場合。

私も試してみました:

SELECT * FROM field as f 
left join data as d on f.ID = d.f_id 
left join project as p on p.ID = d.p_id 
WHERE (p.ID == 'x' || p.ID is null) 

しかし、この戻りフィールド行の行は、他のプロジェクトで使用されていない、と他のプロジェクトは、それを使用して、そのフィールドがある場合ので、私はこのフィールドを取得する文句を言わない場合に限ります。 (左のテーブルから行を取得しない)

とにかく、プロジェクトにデータがない場合でも、左のテーブル(フィールド)からすべての行を選択するにはどうすればよいですか?

+0

恐ろしいテーブル名、フィールド、データ... – jarlh

+0

実際の名前ではなく、例のためだけです@jarlh – Jordan

答えて

0

SELECT F LEFTは F.ID = D.ID左側にDとしてデータをJOINなどのフィールドFROM * はF.ID = P.ID 左FとしてフィールドFROM

+0

あなたの答えを説明してください。 – Jester

0

SELECT * ON Pとしてプロジェクトに参加しますf.IDにdとデータを結合= d.f_id WHERE ISNULL(d.p_id、 'X')= f.ID = DでDとして 左データFとしてフィールドFROM 'X'

SELECT *。 f_id WHERE(d.p_id = 'X'またはd.p_idがヌル)

+0

あなたの答えを説明してください。 – Jester

0

さて、私はこれを行うでしょう:

SELECT F.* FROM field F 
    LEFT data D ON F.id = D.f_id 
    WHERE D.p_id = 'X'; 

あなたはテーブルのフィールドからのデータのみが必要だと言ったので、そうですか?テーブル接頭辞なしで*をそこに残すと、ジョイン上にあるすべてのテーブルにあるすべてのデータが得られ、すべてのテーブルにあるカラムIDのためにあいまいなエラーが発生する可能性があります。

"COUNT(ID) AS COUNTER" 

そして、私は申し訳ありませんが、私はそれを参照してください方法は、問題があるかもしれない:それは通常のようなカラム名にエイリアスを置くためのより良い適用されるため

もう一つは、私はAS取り出しましたソリューション。なぜ空の行を選択したいのですか?列や行を意味しますか?