使用具有id数组的数据透视表在SQL中查询行

时间:2017-06-01 18:22:14

标签: mysql sql

我有两张桌子。一个包含配有id,name和second_name的配偶。另一个是一个数据透视表,其中包含每个配偶的身份和婚姻日期。

Table schema

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之前的方式合并。

修改

将接受查询次数最少的解决方案。

SQLFiddle

1 个答案:

答案 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