【问题标题】:Mysql query to get columns from 2 Tables into one result setMysql查询将2个表中的列获取到一个结果集中
【发布时间】:2023-03-21 12:38:01
【问题描述】:

我正在尝试创建一个查询,该查询显示来自 TableA 的 a4、a2、a3 和来自的日期 通过 b.b1 = 2 连接的所有项目的表 C。输出应位于 按日期降序排列。

TableA                 
___________________________________________
| a1   | a2   | a3   | a4   | a5   | a6   |
-------------------------------------------
| 1    |  222 | 333  | 444  | 555  | 665  |
-------------------------------------------
| 2    |  asd | sdf  | ert  | jkl  | xcv  |
-------------------------------------------
| 3    |  111 | tyu  | bnm  | abc  | xyz  |
-------------------------------------------
| 4    |  222 | yyy  | dfd  | hgg  | 544  |
-------------------------------------------  
| 5    |  222 | y56  | df5  | hg7  | 234  |
------------------------------------------- 

TableB
___________________
| b1  | b2  | b3  |
-------------------
| 1   | 717 | c   |
------------------- 
| 2   | 727 | d   |
------------------- 
| 3   | 737 | c   |
------------------- 
| 4   | 747 | d   |
------------------- 

TableC - c2 is foreign key to a.a1 - c3 is foreign key to b.b1
_____________________________
| c1  | c2  | c3  |  date   |
-----------------------------
| 1   | 2   | 2   |12-01-12 | 
-----------------------------
| 2   | 1   | 1   |12-05-12 | 
-----------------------------
| 3   | 5   | 2   |12-07-12 | 
-----------------------------
| 4   | 3   | 1   |12-14-12 | 
-----------------------------
| 5   | 4   | 2   |12-18-12 | 
-----------------------------

它应该看起来像这样......

____________________________
| a4  | a2  | a3  |  date  |
----------------------------
| ert | 222 | 333 |12-01-12| 
----------------------------
| df5 | 222 | y56 |12-07-12| 
----------------------------
| dfd | 222 | yyy |12-18-12| 
----------------------------

我明白了,如果我将查询分成两部分,我会从两个表中获取信息,以及“UNION ALL” 让我的日期在表格底部添加行(我不想要的另外两列,c2 和 c1),我实际上想要一列 在我的结果中称为 a3 旁边的日期。如何将该列“日期”放入结果集中?

SELECT a.a4, a.a2, a.a3
FROM TableA a
JOIN TableC c ON c.c2 = a.a1
JOIN TableB b ON b.b1 = c.c3 and c.c3 = 2
UNION ALL
SELECT d.date,d.c2,d.c1 
From TableC d
JOIN TableB b ON b.b1 = d.c3 and d.c3 = 2

如有任何问题,请提出,这让我很生气。

【问题讨论】:

    标签: mysql sql join union


    【解决方案1】:

    这里还有其他令人困惑的项目,但无需深入挖掘,这很容易:

    SELECT a.a4, a.a2, a.a3, c.date
    FROM TableA a
    JOIN TableC c ON c.c2 = a.a1
    JOIN TableB b ON b.b1 = c.c3 and c.c3 = 2
    

    UNION 不是你想的那样。

    另外,有没有必要加入表b?

    SELECT a.a4, a.a2, a.a3, c.date
    FROM TableA a
    JOIN TableC c ON c.c2 = a.a1 and c.c3 = 2
    

    【讨论】:

    • @bluefeet 也在做一个...感谢您为我节省了(一半)的努力!
    • 好的...小提琴很棒。我会尝试这两种方法并告诉你。
    • 你们都是天才,但马修的解决方案更简单,所以他是赢家。谢谢大家,不敢相信我想太多了。
    猜你喜欢
    • 2014-07-07
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2014-08-25
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    相关资源
    最近更新 更多