1

我有一个带有 ENUM 的 MySQL 表。由于我有时不得不更改此 ENUM,因此我将其转移到另一个表。现在我必须创建一个语句,它将在一个选择字段中为我提供 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或第二个字段。因为这会产生一个动态字段(“大小”),所以您需要使用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 回答