MySQL - 我应该如何为此做 JOIN? (也解释谢谢)

标签 mysql

请解释如何使用 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

Demo on dbfiddle

关于MySQL - 我应该如何为此做 JOIN? (也解释谢谢),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56196004/

相关文章:

将数据库管道传输到不同服务器时出现Mysql错误

mysql - 在事务中锁定表

python - 在注释中组合 F 和 Count 时,Django "Unknown column in having clause"

PHP mysql 查询返回空白屏幕

sql - 从表 Y 中过滤表 X 中的值

javascript - 搜索后自动显示数据

mySQL - 仅从具有最大点数的表中获取用户

MySQL Group By 未列出所有组项

mysql - 在 where 子句中使用参数的 Superset sql 查询编辑器

php - 将数据库中的关键字显示为复选框选项