【问题标题】:Getting values from 2 tables with different conditions for both tables从两个表具有不同条件的 2 个表中获取值
【发布时间】:2021-10-27 16:32:15
【问题描述】:

表 1

ID FirstName LastNmae city Group code
11 john smith abc E P
21 don davis def E P
3 vee miller ghi Q P
6 vee miller ghi Q P

表 2

ID FirstName LastNmae city Status EmpName Phone
11 john smith abc U Company 1 123
21 don davis def P Company 2 456
3 vee miller ghi C Company 3 789
4 jim jones xyz P comapany4 001

我有上面提到的 2 张桌子。在这些条件下,我需要两个表的输出

对于表 1 条件是: Group='E' AND code='P'

对于表 2 条件是:Status = 'U' OR Status = 'P'

对于输出所需的列是: ID, FirstName, LastName, City, EmpName, Phone

由于列数不匹配,我无法使用 UNION。

期望的输出:

ID FirstName LastNmae city EmpName Phone
11 john smith abc Company 1 123
21 don davis def Company 2 456
4 jim jones xyz comapany4 001

我怎样才能得到想要的输出。使用 UNION 我无法获得“EmpName”和“Phone”列。无论如何使用 JOIN 来获得所需的输出。

【问题讨论】:

  • 这应该是一个简单的问题,但它比应有的难度更大,因为您尚未对数据进行规范化。您的表格的列显然在两个表格中几乎完全重叠。您应该问自己一个问题,为什么它首先在两个表中?通常像这样的数据被组织在一个person 表中,然后像个人到公司、个人到组、个人到状态的关系可以根据他们的需要在不同的表中与公司等的一对一、一对多或多对多关系。然后您的查询可以加入用户、组和状态

标签: mysql sql


【解决方案1】:

我认为你仍然需要UNION。试试这个查询:

SELECT ID, FirstName, LastName, city, EmpName, Phone
FROM table2
WHERE Status IN ('U', 'P')

UNION

SELECT t1.ID, t1.FirstName, t1.LastName, t2.city, t2.EmpName, t2.Phone 
FROM table1 AS t1
LEFT JOIN table2 AS t2 ON t1.ID = t2.ID
WHERE t1.Group = 'E' AND t1.code = 'P'
;

【讨论】:

  • 他需要UNION 有很多原因。标准JOIN 将返回列中的数据,而 OP 想要行中的数据。我不知道为什么人们拒绝使用UNION,而不是感激有一个运营商可以解决他们的问题......
【解决方案2】:

首先,你的结果都来自table2,所以这会返回问题中指定的结果:

select t2.ID, t2.FirstName, t2.LastName, t2.city, t2.EmpName, t2.Phone
from table2 t2
where t2.status in ('U', 'P');

我认为您还需要table1 上的匹配条件(您的示例不需要)。根据您的描述:

select t2.ID, t2.FirstName, t2.LastName, t2.city, t2.EmpName, t2.Phone
from table2 t2
where t2.status in ('U', 'P') or
      exists (select 1
              from table1 t1
              where t1.id = t2.id and
                    t1.Group = 'E' and t1.code = 'P'
             );

【讨论】:

    猜你喜欢
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 2019-12-05
    • 2012-10-12
    • 1970-01-01
    • 2015-07-16
    相关资源
    最近更新 更多