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

标签 mysql sql

我有两张 table 。其中包含带有 id、name 和 secondary_name 的配偶。另一个是数据透视表,其中包含每位配偶的 ID 和结婚日期。

Table schema

配偶表中有 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 之前。

编辑

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

SQLFiddle

最佳答案

您需要使用 UNIONUNION 才能按预期顺序获得结果。例如。以下查询返回 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/

相关文章:

mysql - 综合索引的开销

php - 我有 2 个 MySql 表。如何在 1 个 sql 查询中获取并非所有数据?

SQLite 删除 group by 中的联系

mysql - 找出两个用户之间的连接,排除一个用户不存在的列

php - 将应用程序配置变量存储到数据库

mysql - drupal View 模块 mysql 错误

php - 此 React 应用程序中的实际数据和演示数据不同

mysql - 在 CockroachDB 的 GROUP BY 子句的返回集中连接字符串

php - 当您只进行一次选择时,使用准备好的 Select 语句是否更好?

sql - 为什么列引用在 INNER JOIN 中不明确,而在 NATURAL JOIN 中却不明确?