我有两张 table 。其中包含带有 id、name 和 secondary_name 的配偶。另一个是数据透视表,其中包含每位配偶的 ID 和结婚日期。
配偶表中有 10 个条目,数据透视表中有 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 之前。
编辑
将接受查询最少的解决方案。
最佳答案
您需要使用 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 。
关于mysql - 使用具有 id 数组的数据透视表在 SQL 中查询行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44314551/