3

さまざまなtrue/false列を含むテーブルに結合するクエリがあります。DISTINCT&GROUP BYを適用して、単一の一意の行のみが返されるようにすることができますが、true / false行は予測どおりに動作しません。例:

**Table 1**
loc_id name
-------------
1      a
2      b
3      c
4      d

**Table 2**
prod_id loc_id value
-------------
1       1      abc
2       1      bcd
3       1      def
4       2      fgh

**Table 3**
prod_id flag
-------------
1       0
2       0
3       1
4       1

SELECT DISTINCT name, flag from table1
LEFT JOIN table3 ON table3.prod_id = table2.prod_id
LEFT JOIN table2.loc_id=table1.loc_id

これにより、loc名のリストを含む行が表示されます。ただし、フラグ列が複数の行を返す場合があります。これらの行を組み合わせて、複数の行があり、0と1の両方が含まれている場合、クエリはフラグが1に設定された1つの行のみを返すようにします。行に0が含まれている場合、その行には0が返されます...一意の行を返すGROUP BY名を使用してみましたが、フラグ列に0と1の両方が設定されている重複行の場合は0が返されることに気付きました。

助けていただければ幸いです

4

1 に答える 1

6

1 がある場合は 1 が必要であり、そうでない場合は 0 が必要なため、MAX(フラグ) で十分です。

SELECT name, MAX(flag) from table1
LEFT JOIN table3 ON table3.prod_id = table2.prod_id
LEFT JOIN table2.loc_id=table1.loc_id
GROUP BY name
于 2010-11-19T14:02:32.770 に答える