【问题标题】:SQL Join query to join 2 tables to get desired outputSQL Join 查询以连接 2 个表以获得所需的输出
【发布时间】:2016-05-18 07:45:19
【问题描述】:

我有 2 个表,需要加入它们以获得所需的结果。我尝试了多种类型的连接,但没有运气。 请协助。下面是我的表格的样子:

从 t1 中选择 *

ProductId, Sequence, Property
100, 1, Size
100, 2, Folder
100, 3, License
101, 1, Usage
101, 2, Duration

从 t2 中选择 *

SrNo, ProductId, Property, PropertyValue
1,    100, Size, 10GB
2,    100, Folder, /home/path
3,    101, Usage, Database

我需要加入他们才能得到以下结果:

SrNo, ProductId, Sequence, Property, PropertyValue
1     100         1         Size      10GB
1     100         2         Folder    
1     100         3         License     
2     100         1         Size      
2     100         2         Folder    /home/path
2     100         3         License   
3     101         1         Usage      Database
3     101         2         Duration    

以下是重现相同表的 SQL:

create table t1 (ProductId INT, Sequence INT, Property VARCHAR(255))
insert into t1 values(100,1,'Size');
insert into t1 values(100,2,'Folder');
insert into t1 values(100,3,'License');
insert into t1 values(101,1,'Usage');
insert into t1 values(101,2,'Duration');

create table t2 (SrNo INT, ProductId INT, Property VARCHAR(255), PropertyValue VARCHAR(255))
insert into t2 values(1,100,'Size','10GB');
insert into t2 values(2,100,'Folder','/home/path');
insert into t2 values(3,101,'Usage','Database');

请协助我如何编写查询?

【问题讨论】:

    标签: mysql sql-server join


    【解决方案1】:

    给你

    SELECT T2.SrNo, T2.ProductId, T1.Sequence, T1.Property, T3.PropertyValue
    FROM T2
    JOIN T1 ON T2.ProductID = T1.ProductID
    LEFT JOIN T2 AS T3 ON T1.Property = T3.Property
    

    这里的“问题”是您将 T2 视为两个不同的表。当我第一次从 T2 中选择时,我只选择 SrNo 和 ProductId 来获取这些“有效”值的列表。然后我加入他们到T1。然后我重新加入 T2,将其视为 PropertyValue 的查找表。这里我使用了左连接,因为不是所有 Property 和 Sequence 的组合都有一个有效的 Property。


    我根据评论“修复”了上面的代码,但问题变得清晰起来。在您的示例中,您显示了

    SrNo, ProductId, Sequence, Property, PropertyValue
    1     100         1         Size      10GB
    2     100         1         Size      
    

    我不知道为什么第二行没有 10GB 的 PropertyValue

    【讨论】:

    • 我收到此错误:#1054 - 'on Clause' 中的未知列 'T3.Sequence'
    • 我得到的输出与预期的输出不匹配。你能检查一下吗?
    • @sachinv - 不。现在你必须做一些工作。您需要显示您的起始数据是什么——您正在使用什么代码以及您期望什么。按照书面形式,不可能得到您描述的结果。正如我在编辑中所说的那样。
    【解决方案2】:
    SELECT
        table2.SrNo,
        table1.ProductId,
        table1.Sequence, 
        table1.Property,
        table2.PropertyValue
    FROM t1 AS table1  
    JOIN t2 AS table2 ON table1.ProductId = table2.ProductId
    

    【讨论】:

    • 显示的结果不一样。这是显示的内容:1,100,1,Size,10GB 2,100,1,Size,/home/path 1,100,2,Folder,10GB 2,100,2 ,Folder,/home/path, 1,100,3,License,10GB, 2,100,3,License,/home/path, 3,101,1,Usage,Database, 3,101,2,Duration,Database
    • 你能在这里提供表定义吗?
    • 我也添加了表格 DDL
    • 主键和外键?
    • 为了简单起见,我只保留了我需要的部分
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 2019-01-09
    相关资源
    最近更新 更多