我有两张桌子。一个包含配有id,name和second_name的配偶。另一个是一个数据透视表,其中包含每个配偶的身份和婚姻日期。
Spouse表中有10个条目,Pivot表中有5个条目。没有重复,也没有同一个人婚姻案件。
数据如下所示:
Spouse:
id | name | second_name
---------------------------
0 | Nina | Corynn
1 | Marc | Brown
2 | Alex | Tennenbaum
3 | Josh | Black
4 | Brad | Star
5 | Jessica | Labert
6 | Elise | Tamra
7 | Callie | Lexia
8 | Jack | Kimberley
9 | Anthony | Josh
Pivot:
left_person_id | right_person_id | date_of_marriage
---------------------------------------------------
1 | 2 | 2017-05-02
4 | 5 | 2017-05-02
8 | 6 | 2017-05-02
9 | 7 | 2017-05-02
0 | 3 | 2017-05-02
如果我有一个以下id的数组(1 *,6 *,3 *),我希望获得如下结果的SQL查询是什么:
Result:
id | name | date_of_marriage
-------------------------------
1* | Marc | 2017-05-02
2 | Alex | 2017-05-02
8 | Jack | 2017-05-02
6* | Elise| 2017-05-02
0 | Nina | 2017-05-02
3* | Josh | 2017-05-02
(*)请注意,结果以left_person_id始终位于right_person_id之前的方式合并。
修改
将接受查询次数最少的解决方案。
答案 0 :(得分:1)
您需要使用UNION
UNION
来获得预期顺序的结果。例如。以下查询按right_person_id
:
SELECT *
FROM (
SELECT left_person_id, date_of_marriage, @countx := @countx + 1 AS c
FROM pivot, (SELECT @countx := 1) x
WHERE right_person_id in (1, 6, 3)
UNION
SELECT right_person_id, date_of_marriage, @county := @county + 1 AS c
FROM pivot, (SELECT @county := 1) y
WHERE right_person_id in (1, 6, 3)) b
ORDER BY c
同样,您可以为同一个查询编写left_person_id
版本,并使用上面的输出编写UNION
以获得最终结果。
这是 SQL Fiddle 。