【发布时间】:2016-12-10 06:54:12
【问题描述】:
我有两张桌子。
工作:
+----+----------+
| id | position |
+----+----------+
| 1 | 1 |
| 2 | 2 |
+----+----------+
内容:
+----+---------+------+-------------+
| id | work_id | name | translation |
+----+---------+------+-------------+
| 1 | 1 | Kot | 1 |
| 2 | 1 | Cat | 2 |
| 3 | 2 | Ptak | 1 |
| 4 | 2 | Bird | 2 |
| 5 | 2 | Ssss | 3 |
+----+---------+------+-------------+
我想得到这样的结果:
+----+------+----------+
| id | name | sortName |
+----+------+----------+
| 1 | Kot | NULL |
| 1 | Cat | NULL |
| 2 | Ptak | Ssss |
| 2 | Bird | Ssss |
+----+------+----------+
我不工作的查询在这里:
select
w.id,
c.name,
cSort.name as sortName
from
work w
LEFT JOIN
content c
ON
(w.id=c.work_id)
LEFT JOIN
content cSort
ON
(w.id=cSort.work_id)
WHERE
c.translation IN(1,2) AND
cSort.translation=3
ORDER BY
sortName
我想为每件作品至少获得一个翻译,如果存在则获得第二个翻译(translation=1 始终存在)。对于每一行,我都想要带有用于排序的翻译的特殊列。但对于 work.id,并不总是存在这种翻译。在此示例中,我想按 translation=3 对工作进行排序。
对不起,我的英语不太流利。有什么想法吗?
最好的问候
【问题讨论】:
-
至于“我的不工作查询”:你应该总是告诉我们 what 不工作。例如:“查询显示的排序名称与预期不同,并且不按 work.position 对结果进行排序”。 (解释也可以帮助你自己重新审视问题,你可能会发现为什么结果不是按 work.position 排序的。)
-
这是一个荒谬的数据模型
标签: mysql join left-join sql-order-by