Sql查询列出父亲和孩子的连接,如何区分他们?
拥有这些表格:Sql查询列出父亲和孩子的连接,如何区分他们?,sql,mysql,join,Sql,Mysql,Join,拥有这些表格: table_n1: | t1_id | t1_name | | 1 | foo | table_n2: | t2_id | t1_id | t2_name | | 1 | 1 | bar | 我需要一个能给出两个结果的查询: | names | | foo | | foo / bar | 但是我想不出正确的方法。 我写了这封信: SELECT CONCAT_WS(' / ', table_n1.t1
table_n1:
| t1_id | t1_name |
| 1 | foo |
table_n2:
| t2_id | t1_id | t2_name |
| 1 | 1 | bar |
我需要一个能给出两个结果的查询:
| names |
| foo |
| foo / bar |
但是我想不出正确的方法。
我写了这封信:
SELECT
CONCAT_WS(' / ', table_n1.t1_name, table_n2.t2_name) AS names
FROM
table_n1
LEFT JOIN table_n2 ON table_n2.t1_id = table_n1.t1_id
这适用于一半:这只返回2°行(在上面的示例中):
此查询仅在没有“childs”(表n2)时返回“父”(表n1)名称
如何修复它?使用
联合
并将左连接
更改为内部连接
应该会得到正确的结果
SELECT table_n1.t1_name AS names
FROM table_n1
UNION ALL
SELECT CONCAT_WS(' / ', table_n1.t1_name, table_n2.t2_name) AS names
FROM table_n1
INNER JOIN table_n2 ON table_n2.t1_id = table_n1.t1_id
SELECT table_n1.t1_name AS names
FROM table_n1
UNION ALL
SELECT CONCAT_WS(' / ', table_n1.t1_name, table_n2.t2_name) AS names
FROM table_n1
INNER JOIN table_n2 ON table_n2.t1_id = table_n1.t1_id