我正在尝试在单个查询中实现内部和外部联接,我不确定我是以正确的方式还是错误的方式,因为我对查询不是很好。
所以这就是它。
我有以下表格。
hrs_residentials
hrs_residential_utilities
hrs_utilities
hrs_utility_type
hrs_residentials :
ResID, ResType, ResNo - - -
1 2 001 - - -
hrs_residential_utilities :
RUID, UtilityID, ResID, - - - -
NULL NULL NULL
hrs_utilities :
UtilityID, UtilityTypeID, Number, ConsumerNumber, -, -, -
NULL NULL NULL NULL
hrs_utility_type :
UTID, UName, UDescription
1 PESCO PESCO Electric Meter
2 SNGPL Sui Northen Gas Pipe Lines
所以我想在数据表中显示数据,但是我想要的数据应该在表格中显示为hrs_residentials表,如果hrs_residential_utilities有数据,则剂量很重要。 所以我去了左外连接,我得到了我想要的结果。
但在那之后,当我尝试使用hrs_residential_utilities
为hrs_utilities
做内心时,我也停止了hrs_residentials
的结果。好像我们看到hrs_residential
确实有表格中的数据。我不希望与hrs_residentials
进行内部联接,我想在hrs_residential_utilities
和hrs_utilities
之间建立内部联接。
是否有可能,或者我在这里采取了错误的方法?对不起我不好。正确的查询是什么,如果有人可以帮助我。
这是我迄今为止尝试过的查询。
SELECT R.`ResID`,R.`ResNo`
FROM `hrs_residentials` R
LEFT OUTER JOIN `hrs_residential_utilities` RU
ON R.`ResID` = RU.ResID
INNER JOIN `hrs_utilities` U
ON RU.`UtilityID` = U.`UtilityID`
WHERE 1=1;
我停止从hrs_residential
表中获取结果在内部联接之后,但我正在其他两个表之间进行内部联接。
答案 0 :(得分:0)
尝试这样的子查询:
SELECT *
FROM `hrs_residentials` R
LEFT OUTER JOIN
(
SELECT * FROM
`hrs_residential_utilities` RU
INNER JOIN `hrs_utilities` U
ON RU.`UtilityID` = U.`UtilityID`
) AS subqyr
ON R.`ResID` = subqyr.`ResID`
答案 1 :(得分:0)
运行此查询并查看结果
SELECT R。ResID
,R。ResNo
来自hrs_residentials
R
LEFT OUTER JOIN hrs_residential_utilities
RU
ON R。ResID
= RU.ResID
然后运行此查询并查看结果:
SELECT * FROM hrs_utilities
我怀疑你会发现RU.utilities ID与hrs_utilities中的任何内容都不匹配。
您的查询本身应返回hrs_residentials中的所有内容并加入来自hrs_residential_utilities的任何匹配数据,这可能会也可能不会将RU.ResID返回为null,具体取决于它是否匹配。
然后过滤RU.UtilityId是否与hrs_utilities表中的任何内容匹配,这与null项不匹配。
感谢。 奥利弗