Mysql 如何在连接两个表时避免重复
我有两张桌子Mysql 如何在连接两个表时避免重复,mysql,join,Mysql,Join,我有两张桌子 1. test 1 2. test 2 SELECT t1.name, t2.name FROM test1 t1 INNER JOIN test2 t2 WHERE t1.id = t2.jid **name** - **name** Kerala - value 1 kerala - value 2 kerala - value 3 kerala - value 4 第一桌有 **id** - **name** 1
1. test 1
2. test 2
SELECT t1.name, t2.name
FROM test1 t1
INNER JOIN test2 t2
WHERE t1.id = t2.jid
**name** - **name**
Kerala - value 1
kerala - value 2
kerala - value 3
kerala - value 4
第一桌有
**id** - **name**
1 - kerala
2 - Tamilnadu
第二桌
**name** - **jid**
value 1 - 1
value 2 - 1
value 3 - 1
value 4 - 1
value 5 - 2
我的查询--
1. test 1
2. test 2
SELECT t1.name, t2.name
FROM test1 t1
INNER JOIN test2 t2
WHERE t1.id = t2.jid
**name** - **name**
Kerala - value 1
kerala - value 2
kerala - value 3
kerala - value 4
现在我得到了这个结果
1. test 1
2. test 2
SELECT t1.name, t2.name
FROM test1 t1
INNER JOIN test2 t2
WHERE t1.id = t2.jid
**name** - **name**
Kerala - value 1
kerala - value 2
kerala - value 3
kerala - value 4
但我需要这样的结果
Kerala - value 1
- value 2
- value 3
- value 4
“喀拉拉邦”的值不应重复 我认为这是不可能的-返回值中不能有空值。您可以使用用户组concat方法。请检查下面的查询
SELECT t1.name,GROUP_CONCAT(t2.name) FROM test1 t1 INNER JOIN test2 t2 WHERE t1.id = t2.jid
您可以使用以下查询:
SELECT CASE
WHEN t2.name = t3.firstName THEN t1.name
ELSE ''
END AS name,
t2.name
FROM test1 t1
INNER JOIN test2 t2 ON t1.id = t2.jid
INNER JOIN (
SELECT jid, MIN(name) AS firstName
FROM test2
GROUP BY jid) AS t3 ON t2.jid = t3.jid
只要在test2
表中有一条记录具有MIN(name)
perjid
,这将产生所需的结果
试试这个
SELECT IF (@oldname = name1,'',name1),
name2,
@oldname:=name1 AS oldname FROM
(
SELECT t1.name AS name1, t2.name AS name2
FROM test1 t1
INNER JOIN test2 t2
WHERE t1.id = t2.jid
) t,
(SELECT @oldname:='' ) tmp;
您要求的通常是在显示数据的层中完成的,而不是在生成数据的层中完成的。因此,您应该保留现有的SQL,并在解决方案的不同层中删除重复的SQL。