【问题标题】:Joining 3 x MYSQL Tables together with 2 Different Unique Keys将 3 个 MYSQL 表与 2 个不同的唯一键连接在一起
【发布时间】:2015-10-02 05:17:59
【问题描述】:

我在加入以下三个表时遇到问题,因为这三个表之间没有唯一键 计算机、客户端和驱动器

*Table Computers*
ComputerID  ClientID    Name        Domain      UserName    OS
========================================================================
1           1           WS01        ABC        Admin        7
2           1           WS02        ABC        Admin        7
3           1           WS03        ABC        Admin        7
4           2           CH21        CORP       Admin        7
5           2           CH22        CORP       Admin        7
6           3           LT33        WGE        Admin        7


*Table Clients*
ClientID    Client Name 
=======================
1       Company1
2       Company2
3       Company3

*Table Drives*
DriveID  ComputerID Letter Size Free Missing FileSystem
======================================================================
1       1       C       102400      100000      0       NTFS
2       1       D       102400      100000      0       NTFS
3       1       E       102400      100000      1       FAT32
4       2       C       102400      100000      0       NTFS
5       3       C       102400      100000      0       NTFS
6       4       C       102400      100000      0       NTFS
7       4       F       102400      100000      0       NTFS
8       4       E       102400      100000      1       FAT32
9       4       D       102400      100000      0       NTFS
10      5       C       102400      100000      0       NTFS
11      5       D       102400      100000      0       NTFS
12      6       C       102400      100000      0       NTFS

我有以下查询:

SELECT cl.Name, comp.Name, dr.`Letter`, dr.`Free`,dr.`Size`,dr.`FileSystem`,            
dr.`Missing`   
FROM clients AS cl
INNER JOIN computers AS comp ON comp.`ClientID` = cl.clientid
LEFT OUTER JOIN drives AS dr ON dr.`ComputerID` = comp.`ComputerID` 

我希望得到以下结果

Expected Result:
ClientName ComputerName Letter Free     Size        Filesystem  Missing
=======================================================================
Company1    WS01        C       100000      102400      NTFS        0
Company1    WS01        D       100000      102400      NTFS        0
Company1    WS01        E       100000      102400      NTFS        1
Company1    WS02        C       100000      102400      NTFS        0
Company1    WS03        C       100000      102400      NTFS        0
Company2    CH21        C       100000      102400      NTFS        0
Company2    CH21        F       100000      102400      NTFS        0
Company2    CH21        E       100000      102400      NTFS        1
Company2    CH21        D       100000      102400      NTFS        0
Company2    CH22        C       100000      102400      NTFS        0
Company2    CH22        D       100000      102400      NTFS        0
Company3    LT33        C       100000      102400      NTFS        0

有人可以解释为什么我在运行上面显示的查询时缺少行并且我没有得到预期的结果。当所有三个表之间没有唯一键时,它们是否还可以提供一种将 3 个表正确连接在一起的方法

【问题讨论】:

  • SQL 看起来不错,只是从外观上看,除了列名周围的 ' 之外,但我想那是 mySQL 的事情。您的查询得到什么结果?或者您的预期输出中缺少哪些行?
  • 六台电脑都有驱动。因此,您不需要该数据的左连接,并且您希望在结果中看到 12 个驱动器。我数了 12 行 :)

标签: mysql sql


【解决方案1】:

您的代码看起来很可靠。我唯一能想到的可能是你的 JOINS 的顺序。

这里有一篇关于加入订单的好文章。

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/9d223e3f-c040-4eb9-a44e-5556e85a821b/inner-join-after-left-outer-join

【讨论】:

  • 感谢您的这篇文章,它非常有帮助。
  • 我希望这解决了您的问题。
【解决方案2】:

这一切似乎都对我有用:

http://sqlfiddle.com/#!6/f5d89/1

它在 sql2014 中,但我认为 SQL 风格不会妨碍这里。

您发现缺少哪些行?

【讨论】:

  • 我犯了一个简单的错误。我在查询中输入了错误的表名,而不是 Drives 我使用了一个名为 internal_drives 的单独表,其中包含我正在寻找的信息。我发现 SQLFiddle 非常有帮助,谢谢。
【解决方案3】:
SELECT cl.NAME, comp.NAME, dr.`Letter`, dr.`Free`, dr.`Size`, dr.`FileSystem`, dr.`Missing`
FROM Computers AS comp
INNER JOIN Clients AS cl ON comp.ClientID = cl.ClientID
LEFT OUTER JOIN Drives AS dr ON dr.ComputerID = comp.ComputerID

缺少行是什么意思?

【讨论】:

    猜你喜欢
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 2015-10-08
    • 1970-01-01
    相关资源
    最近更新 更多