【发布时间】: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 行 :)