请解释如何使用 JOIN 显示所需的输出,因为我只知道如何显示前两列(如果使用正确,则显示 idk)。在此先感谢您帮助这个新手 :D
已尝试:
SELECT CONCAT_WS(" ", client.client_firstname, client.client_lastname) AS A_name, relationship.rel_client1_state AS A_state
FROM client
INNER JOIN relationship on client.client_id = relationship.rel_client1_id;
数据库
CREATE TABLE client (
client_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
client_firstname VARCHAR(30),
client_lastname VARCHAR(30)
);
CREATE TABLE relationship (
rel_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
rel_client1_id INT(6),
rel_client1_state VARCHAR(30),
rel_client2_id INT(6),
rel_client2_state VARCHAR (30)
);
INSERT INTO client (client_id, client_firstname, client_lastname) VALUES ('1', 'James', 'Potter');
INSERT INTO client (client_id, client_firstname, client_lastname) VALUES ('2', 'Harry', 'Potter');
INSERT INTO client (client_id, client_firstname, client_lastname) VALUES ('3', 'Lily', 'Potter');
INSERT INTO relationship (rel_id, rel_client1_id, rel_client1_state, rel_client2_id, rel_client2_state) VALUES ('1', '1', 'Father', '2', 'Son');
INSERT INTO relationship (rel_id, rel_client1_id, rel_client1_state, rel_client2_id, rel_client2_state) VALUES ('2', '3', 'Wife', '1', 'Father');
预期:
A_name | A_状态 | B_名称 | B_状态
詹姆斯·波特 |父亲 |哈利·波特 |儿子
詹姆斯·波特 |丈夫 |莉莉·波特 |妻子
实际输出:
A_name | A_状态
詹姆斯·波特 |父亲
莉莉·波特 |妻子
最佳答案
由于您想要获取两个客户(关系双方)的客户数据,您需要将 relationship
表连接到 clients
表两次,首先基于rel_client1_id
然后在 rel_client2_id
上:
SELECT CONCAT_WS(' ', c1.client_firstname, c1.client_lastname) AS A_Name,
r.rel_client1_state AS A_State,
CONCAT_WS(' ', c2.client_firstname, c2.client_lastname) AS B_Name,
r.rel_client2_state AS B_State
FROM relationship r
JOIN client c1 ON c1.client_id = r.rel_client1_id
JOIN client c2 ON c2.client_id = r.rel_client2_id
输出:
A_Name B_Name A_State B_State
Lily Potter James Potter Wife Husband
James Potter Harry Potter Father Son
关于MySQL - 我应该如何为此做 JOIN? (也解释谢谢),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56196004/