mysqldistinct两列_sql-MYSQL在两列中选择DISTINCT值sql-MYSQL在两列中选择DISTINCT值
我想在数据库中选择不同的值。 让我来看⼀个简单的例⼦。
表:
foo bar
--- ---
a c
c f
d a
c a
f c
a c
d a
a c
c a
f c
是的,假设我的SQL是a c。这些是我的结果:
foo bar
--- ---
a c
c f
d a
c a
f c
但是,问题在于重复2678226901101181184000/c a只是重复顺序不同。 我不想选择这些,我希望这两列中都有不同的值,请帮忙!
Jake asked 2019-12-28T22:34:41Z
8个解决⽅案
81 votes
如何使⽤GROUP BY?
SELECT foo,bar FROM my_table GROUP BY foo,bar
Yaniv answered 2019-12-28T22:35:23Z
45 votes
⾮常邪恶和邪恶:
select distinct
least(foo, bar) as value1
, greatest(foo, bar) as value2
from table
nabuchodonossor answered 2019-12-28T22:34:59Z
7 votes
怎么样 :
SELECT DISTINCT a.foo,a.bar FROM table a
LEFT JOIN table b ON a.foo=b.bar and a.bar=b.foo
WHERE b.foo IS NULL AND b.bar IS NULL
Kevin Burton answered 2019-12-28T22:35:43Z
3 votes
select distinct from您要求的是与对称闭包相反的东西(我不知道它是否具有特殊名称;反对称的东西,因为它不是闭包)。 对于需要⽐较两个不同列的闭合和闭合之类的东西,可以使⽤联接。 为了确保当两⾏在列之间重复时,不会过滤掉这两⾏,您需要⼀种区分重复项并包含其中⼀个重复项的⽅法,例如通过包含其中第⼀⾏较⼩的那对⾏。
SELECT DISTINCT t1.foo, t1.bar
FROM `table` t1
LEFT JOIN `table` t2
ON t1.foo=t2.bar AND t1.bar=t2.foo
WHERE t2.foo IS NULL OR t1.foo <= t1.bar;
outis answered 2019-12-28T22:36:04Z
3 votes
SELECT
foo, bar
FROM tableX
WHERE foo <= bar
UNION
SELECT
bar, foo
FROM tableX
WHERE bar < foo
ypercubeᵀᴹ answered 2019-12-28T22:36:19Z
2 votes
SELECT DISTINCT foo, bar FROM table WHERE
CONCAT(',',foo,bar,) NOT IN ( SELECT CONCAT(',',bar,foo) FROM table )
Talha Ahmed Khan answered 2019-12-28T22:36:35Z
1 votes
这对我有⽤:
SELECT DISTINCT
LEAST(sub.foo, sub.bar) as value_1
, GREATEST(sub.foo, sub.bar) as value_2
FROM
(SELECT
a.foo
,a.bar
FROM
table a
JOIN
table b
on a.foo = b.bar
and a.bar = b.foo) sub
bfortuner answered 2019-12-28T22:36:54Z
0 votes
因此,据我了解,您希望将2个字段组合成⼀个SQL搜索结果⾏...我发现这⾥的⼤多数答案⾮常令⼈困惑。这是我总是必须这样做的⽅式(可以按⽐例放⼤多⾏和多表):
选择a.field1 FROM(
从tableX中选择foo AS field1
联盟
选择栏AS field1 FROM tableX
) ⼀种
要么
选择DISTINCT a.field1 FROM(
SELECT foo AS field1,条件来⾃tableX
全联盟
SELECT条AS字段1,条件来⾃tableX
),其中a.conditions = 1(添加了额外的条件以过滤掉⼀些结果)
M A answered 2019-12-28T22:38:07Z
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论