1

ENUMを備えたMySQLテーブルがありました。このENUMを時々変更しなければならなかったので、別のテーブルに転送しました。次に、ステートメントを作成する必要があります。これにより、1つの選択フィールドにenum/newTableの名前が表示されます。

表1(ボトル):

id    | size      | size_id
1     | small     | (NULL)
2     | medium    | (NULL)
3     | big       | (NULL)
4     | (NULL)    | 1
5     | (NULL)    | 2
6     | (NULL)    | 3

表2(bottle_size):

id    | name
1     | small
2     | medium
3     | big

選択する:

SELECT id, <dontknow> as size
FROM bottle b
LEFT JOIN bottle_size bz ON b.size_id = bz.id
WHERE size = 'small';

どうすればこれを行うことができますか?

ありがとう

4

2 に答える 2

2

を使用IFNULL()して、そうでない場合は最初のフィールドを選択し、そうでないNULL場合は2番目のフィールドを選択できます。これにより動的フィールド(「サイズ」)が生成されるため、条件を追加するHAVING代わりに次を使用する必要があります。WHERE

SELECT b.id, IFNULL(b.size, bz.name) AS size
FROM bottle b
LEFT JOIN bottle_size bz ON b.size_id = bz.id
HAVING size = 'small';

デモ:http ://sqlfiddle.com/#!2 / 9e2df / 3

于 2013-03-21T10:52:05.570 に答える
0

サブクエリとしても利用可能:)

SELECT
  b.id,
  ifnull(b.size,
    (SELECT name FROM bottle_size bz WHERE bz.id=b.size_id)
        ) AS size_
FROM bottle b
HAVING size_ = 'small'

http://sqlfiddle.com/#!2/9e2df/15

于 2013-03-21T11:06:03.453 に答える