所以我有两张桌子。两者都有五个共同的列(roomname,usercount,userlimit,topic,extra),同时每个表还有其他不相关的列。
我想要的是使用SELECT并检索TableA + TableB的组合,其中'roomname'值在结果中必须是唯一的。
因此,如果TableA包含一个roomname ='room1'的行,而TableB包含一个roomname ='room1',请优先选择TableA中的一个,并且不要添加TableB中的项。请记住,只有'roomname'值才会相同。 usercount,userlimit,topic,extra将不同于TableA到TableB,即使'roomname'值是相同的。
答案 0 :(得分:1)
SELECT roomname, usercount, userlimit, topic, extra
FROM TableA
UNION ALL
SELECT roomname, usercount, userlimit, topic, extra
FROM TableB
WHERE roomname NOT IN
( SELECT roomname FROM TableA )
答案 1 :(得分:0)
SELECT roomname, usercount, userlimit, topic, extra
FROM TableA
UNION
SELECT roomname, usercount, userlimit, topic, extra
FROM TableA
默认情况下,MySQL中的联合查询确实“不同”并消除了重复行(又名UNION DISTINCT
)。如果您想获得重复的行,那么您可以改为UNION ALL
。
select tableA.*, tableB.*
from tableA
join tableB on tableA.roomname = tableB.roomname
where (tableA.usercount <> tableB.usercount) or (tableA.userlimit <> tableB.userlimit)
or (tableA.topic <> tableB.topic) or (tableA.extra <> tableB.extra)
这会从两个表中返回所有行,它们共享相同的房间名,但在一个或多个其他字段中存在差异。如果您只想在这些字段上显示完全相同的重复项,请将<>
更改为=
。
mod第2部分
select tableB.*
from tableB
left join tableA on tableA.roomname = tableB.roomname
where tableA.roomname is null
这将返回表B中所有记录,其中roomname字段在表A中没有匹配
在OP的更新解释之后:
SELECT roomname, usercount, userlimit, topic, extra
FROM TableA
UNION ALL
SELECT roomname, usercount, userlimit, topic, extra
FROM TableB
WHERE roomname NOT IN
( SELECT roomname FROM TableA )
答案 2 :(得分:0)
您尝试做的事情听起来更像UNION
而不是JOIN
。前者只是给你一个组合的结果集,而后者执行一个SQL JOIN,它修改了结果集。
要合并两个查询的结果,UNION SELECT查询,例如
(SELECT roomname, usercount, userlimit, topic, extra
FROM TableA)
UNION DISTINCT
(SELECT roomname, usercount, userlimit, topic, extra
FROM TableB);
UNION DISTINCT
消除了重复项。我手边没有服务器来测试语法,但是对manual来说,它应该是正确的。
答案 3 :(得分:0)
SELECT roomname, usercount, userlimit, topic, extra
FROM
(
(SELECT roomname, usercount, userlimit, topic, extra
FROM TableA)
UNION
(SELECT roomname, usercount, userlimit, topic, extra
FROM TableB)
) AAA
GROUP BY roomname
请注意我不使用任何聚合函数,这将使查询仅显示每个组的第一个结果(在这种情况下,假设来自UNION中的第一个SELECT。
@ypercube解决方案也很好(比我的更容易理解)。 But due to a bug in MySQl,我认为我的解决方案效率更高(你需要检查一下)。