我正在尝试使用右连接选择TABLEC中的所有记录及其在TABLEA或TABLEB中的等效值。我使用的是MYSQL 5.5.47。
- 表格数据如下
TABLEA TABLEB TABLEC
ID FNAME ID MNAME ID LNAME
0 ANOOP 0 N 0 SINGH
1 BIMA 2 SITA 3 RAJ
4 CIMI 4 B 5 KUMAR
6 RAVI 5 A 6 D
- 使用以下查询并尝试选择TABLEC中的所有记录及其在TABLEA或TABLEB中的等效值
SELECT A.FNAME, B.MNAME, C.LNAME
FROM TABLEA AS A
RIGHT JOIN TABLEB AS B ON A.ID = B.ID
RIGHT JOIN TABLEC AS C ON C.ID = B.ID
- 我得到以下结果
ANOOP N SINGH
NULL NULL RAJ
NULL A KUMAR
***NULL*** NULL D
突出显示的值不会将值显示为'RAVI',而是在MYSQL 5.5.47中显示NULL。我试图修改与C& C相关的第二次加入中的'='条件。但仍然没有运气。我在这做错了什么?如何获取值'RAVI'代替NULL?任何建议都会非常有帮助。
答案 0 :(得分:0)
正如您所说"选择TABLEC中的所有记录及其在TABLEA或TABLEB"中的等效值,因此您需要将C与A和C一起加入B.所以您需要将查询更新为:
SELECT A.FNAME, B.MNAME, C.LNAME
FROM TABLEC AS C RIGHT JOIN TABLEB AS B
ON B.ID = C.ID
RIGHT JOIN TABLEA AS A
ON C.ID = A.ID
如果您想要A,B和C中存在的所有记录。将显示没有值的记录的NULL值,
SELECT A.FNAME, B.MNAME, C.LNAME
FROM (
TABLEA AS A
LEFT JOIN TABLEB AS B ON B.ID = A.ID
)
RIGHT JOIN TABLEC AS C ON ( C.ID = B.ID
OR B.ID = NULL
OR A.ID = C.ID )
WHERE 1
答案 1 :(得分:0)
您正尝试使用右连接选择TABLEC中的所有记录及其在TABLEA或TABLEB中的等效值。因此,表A和表B连接到表c记录。所以我们需要使用Left join(您将获得表C的所有记录以及表A和B的常见记录)。更多信息请参考link
SELECT
ifnull(A.FNAME,""),
ifnull(B.MNAME,""),
ifnull(C.LNAME,"")
FROM
TABLEA AS A
LEFT JOIN
TABLEB AS B
ON
A.ID = B.ID
LEFT JOIN
TABLEC AS C
ON
C.ID = B.ID
答案 2 :(得分:0)
问题是你没有包含所有ID的表。所以你必须做一个。然后你可以加入。
使用此查询获取所有ID
SELECT ID FROM TABLEA
UNION
SELECT ID FROM TABLEB
UNION
SELECT ID FROM TABLEC
现在我们可以使用此查询/ ids表加入其他人
SELECT A.FNAME, B.MNAME, C.LNAME
FROM (
SELECT ID FROM TABLEA
UNION
SELECT ID FROM TABLEB
UNION
SELECT ID FROM TABLEC
) I
LEFT JOIN TABLEA A ON I.ID = A.ID
LEFT JOIN TABLEB B ON I.ID = B.ID
LEFT JOIN TABLEC C ON I.ID = C.ID
当然,如果您有另一个表(TABLEID),其中包含您可以使用的所有ID的列表,而不是上面的子查询。可能你的模型有这样的表格,但除非你告诉我们,否则我们不会知道。
答案 3 :(得分:0)
SELECT A.FNAME, B.MNAME, C.LNAME
FROM TABLEC AS C
LEFT JOIN TABLEA AS A ON (A.ID = C.ID)
LEFT JOIN TABLEB AS B ON (B.ID = C.ID)
答案 4 :(得分:0)
DROP TABLE IF EXISTS table_a;
DROP TABLE IF EXISTS table_b;
DROP TABLE IF EXISTS table_c;
CREATE TABLE table_a
(id INT NOT NULL PRIMARY KEY
,fname VARCHAR(12) NULL
);
INSERT INTO table_a VALUES
(0,'ANOOP'),
(1,'BIMA'),
(4,'CIMI'),
(6,'RAVI');
CREATE TABLE table_b
(id INT NOT NULL PRIMARY KEY
,mname VARCHAR(12) NULL
);
INSERT INTO table_b VALUES
(0,'N'),
(2,'SITA'),
(4,'B'),
(5,'A');
CREATE TABLE table_c
(id INT NOT NULL PRIMARY KEY
,lname VARCHAR(12) NULL
);
INSERT INTO table_c VALUES
(0,'SINGH'),
(3,'RAJ'),
(5,'KUMAR'),
(6,'D');
SELECT a.fname
, b.mname
, c.lname
FROM table_c c
LEFT
JOIN table_a a
ON a.id = c.id
LEFT
JOIN table_b b
ON b.id = c.id;
+-------+-------+-------+
| fname | mname | lname |
+-------+-------+-------+
| ANOOP | N | SINGH |
| NULL | NULL | RAJ |
| NULL | A | KUMAR |
| RAVI | NULL | D |
+-------+-------+-------+
4 rows in set (0.02 sec)