MYSQL两个内部联接未产生结果



我有3个表与id连接,id构造如下:

RAD table
rad_id      strp_ID     strf_ID
1               1           null
2               1           null
3           null            3
4           null            4
5           null            4
STRANKEP table
strp_ID     strp_NAZIV
1           data1
2           data2
3           data3
STRANKEF table
strf_ID     strf_NAZIV
1           data1
2           data2
3           data3
4           data4

例如,在rad_id=4的情况下,我试图获得strf_NAZIV的值witch为data4。因为rad_id=4具有strf_id=4,并且在STRANKEF表中stf_id=4具有data4值。

rad_id=4的示例采石场为:

SELECT rad_id, strp_NAZIV, strf_NAZIV FROM RAD 
INNER JOIN STRANKEP ON RAD.strp_ID=STRANKEP.strp_ID 
INNER JOIN STRANKEF ON RAD.strf_ID=STRANKEF.strf_ID 
WHERE rad_id = 4;

当我运行采石场时,我得到了0行的结果,没有错误,并更正了列。我无法理解这一点,请给我建议。

rad_id strp_NAZIV strf_NAZIV
0 rows

strp_ID = 4所在的STRANKEP表不存在。执行INNER JOIN时,它只保留两个表匹配的行。

也许你想要这个:

SELECT rad_id, strp_NAZIV, strf_NAZIV 
FROM RAD 
LEFT JOIN STRANKEP ON RAD.strp_ID=STRANKEP.strp_ID 
LEFT JOIN STRANKEF ON RAD.strf_ID=STRANKEF.strf_ID 
WHERE rad_id = 4;

好吧,第一件事是内部联接只返回两个表中都存在元组属性的结果,当其中一个表包含例如RAD的空值时,ID为3、4、5的元组将不会从第一个内部联接的结果返回,ID为1和2的元组将从第二个返回。更多参考:

https://www.w3schools.com/SQL/sql_join_inner.asp

尝试使用外部联接而不是内部联接来获得具有null值的结果。

最新更新