【问题标题】:how to combine 2 mysql rows and get one row如何组合2个mysql行并获得一行
【发布时间】:2019-02-28 06:04:27
【问题描述】:

我有一张桌子report_card 并且,

示例数据如下。

report_id  orig_id   test_id        name     address
------------------------------------------------------
1           JH06E     IN2001         xyz      delhi
2           HL789     IN2001         abc      mumbai
3           ZPYNR     IN2002         pqr      mumbai
4           5R4HJ     IN2002         mno      delhi

我想要得到孟买所有行的结果,但地址是德里而不是孟买? 这里我有 id 1 和 2 有相同的 test_id 和 3 和 4 也有。输出如下,

report_id  orig_id   test_id        name     address
------------------------------------------------------
 2           HL789     IN2001         abc      delhi
 3           ZPYNR     IN2002         pqr      delhi

【问题讨论】:

  • 看一下自连接标签。你也许可以自己回答这个问题。
  • 如果 test_id 相同,我想选择 addressdelhi 但 orig_id 属于同一 test_id 的 mumbai 的行。并感谢快速回复...

标签: mysql sql database join self-join


【解决方案1】:

像这样的自加入:

SELECT t1.report_id, t1.orig_id, t1.test_id, t1.name, t2.address
FROM report_card t1
JOIN report_card t2
  ON t1.test_id = t2.test_id
WHERE
  t1.address = 'mumbai' AND
  t2.address = 'delhi'

【讨论】:

  • 你好@danblack,如果我只想获取地址为mumbai 的第2 行和第3 行但通过delhi 更改它,你能否再次指导我。
  • 相当容易的改变。
【解决方案2】:

@danblack 写的是正确的,但要选择孟买的 orig_id,您需要编写如下所示的选择。

SELECT t1.report_id, 
       t2.orig_id, 
       t1.test_id, 
       t1.name, 
       t1.address 
FROM   mytable t1 
       INNER JOIN mytable t2 
               ON t1.test_id = t2.test_id 
WHERE  t1.address = 'delhi' 
       AND t2.address = 'mumbai' 

编辑

对不起,我在问题上更改了我的结果,我可以得到所有的行 孟买,但地址是德里而不是孟买

你也可以像下面这样使用子查询来做到这一点。

SELECT t1.report_id, 
       t1.orig_id, 
       t1.test_id, 
       t1.name, 
       (SELECT address 
        FROM   mytable m 
        WHERE  m.test_id = t1.test_id 
               AND m.address = 'delhi' 
        LIMIT  1)AS address 
FROM   mytable t1 
WHERE  t1.address = 'mumbai' 

但是看看你的数据和预期的结果,你只需要像下面这样

SELECT t1.report_id, 
       t1.orig_id, 
       t1.test_id, 
       t1.name, 
       'delhi' address 
FROM   mytable t1 
WHERE  t1.address = 'mumbai' 

【讨论】:

  • 对不起,我在问题上更改了我的结果,我可以得到孟买的所有行,但地址是德里而不是孟买?
  • 为此,您可以简单地通过子查询来完成,而无需自连接
  • 您可以查看新查询的更新答案。
猜你喜欢
  • 1970-01-01
  • 2022-01-24
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 1970-01-01
相关资源
最近更新 更多