条件mysql查询多个表

时间:2016-01-28 18:19:14

标签: mysql

我在mysql数据库中有2个表,如下所示。我正在寻找一个将从书中选择*但是如果preview_image ='none'的查询,则preview_image = books.id = images.parentid中具有最大大小的行的hash_id。希望这是有道理的。

table books
+----------------+---------------+
| id    | title  | preview_image |
+----------------+---------------+
| 1     | book1  | 55859076d906  |
| 2     | book2  | 20a14f9fd7cf  |
| 3     | book3  | none          |
| 4     | book4  | ce805ecff5c9  |
| 5     | book5  | e60a7217b3e2  |
+----------------+---------------+

table images
+-------------+------+---------------+
| parentid    | size | hash_id       |
+--------------------+---------------+
| 2           | 100  | 55859076d906  |
| 1           | 200  | 20a14f9fd7cf  |
| 3           | 300  | 34805fr5c9e5  |
| 3           | 400  | ce805ecff5c9  |
| 3           | 500  | e60a7217b3e2  |
+--------------------+---------------+

由于

2 个答案:

答案 0 :(得分:0)

您可以使用SUBSTRING_INDEX()从已排序的GROUP_CONCAT()获取第一条记录,并使用CASE表达式进行切换:

SELECT   books.id, books.title, CASE books.preview_image
           WHEN 'none' THEN SUBSTRING_INDEX(
             GROUP_CONCAT(images.hash_id ORDER BY images.size DESC SEPARATOR ',')
           , ',', 1)
           ELSE books.preview_image
         END AS preview_image
FROM     books LEFT JOIN images ON images.parentid = books.id
GROUP BY books.id

答案 1 :(得分:0)

使用SQL Select only rows with Max Value on a Column中的一种技术编写一个子查询,为每个父ID找到所需的哈希ID。然后将其与books表连接。

SELECT b.id, b.title, IF(b.preview_image = 'none', i.hash_id, b.preview_image) AS image
FROM books AS b
LEFT JOIN (SELECT i1.parentid, i1.hash_id
           FROM images AS i1
           JOIN (SELECT parentid, MAX(size) AS maxsize
                 FROM images
                 GROUP BY parentid) AS i2
           ON i1.parentid = i2.parentid AND i1.size = i2.size) AS i
ON b.id = i.parentid