mysql - 在 SQL 中选择不同的对
问题描述
对于此表,每列都有不同的行,即 count(Name) = count(Spouse_Name) = count(*) 想要编写一个 SQL 查询,其中对(Name 和 Spouse_Name)是不同的,即 Alex Sandra 和 Sandra Alex 相同。
输出应如下:
注意:如果可能,请自行加入。
解决方案
假设name
andspouse_name
永远不会在同一行中相等,您可以NOT EXISTS
像这样使用:
select t.*
from tablename t
where t.name < t.spouse_name
or not exists (
select 1 from tablename
where name = t.spouse_name and spouse_name = t.name
)
此代码适用于任何数据库,因为它使用标准 SQL。
对于 MySql 和此示例数据,您可以执行此自连接:
select distinct
least(t1.name, t1.spouse_name) name,
greatest(t1.name, t1.spouse_name) spouse_name
from tablename t1 inner join tablename t2
on t1.name = t2.spouse_name and t2.name = t1.spouse_name
尽管没有连接也可以获得相同的结果:
select distinct
least(t1.name, t1.spouse_name) name,
greatest(t1.name, t1.spouse_name) spouse_name
from tablename t1
还有另一个带有自连接的查询:
select t1.name, t1.spouse_name
from tablename t1 inner join tablename t2
on t2.spouse_name = t1.name and t2.name = t1.spouse_name
where t1.name < t1.spouse_name
推荐阅读
- java - 弃用分页参数
- reactjs - Heroku 永远部署代码循环直到超时
- javascript - 无效的正则表达式:: 字符类中的范围乱序
- php - 获取 WooCommerce 产品属性标签名称
- ruby-on-rails - 修复 Rails 生成器问题:两次无操作调用相同的生成器并退出 0 而不运行第二个生成器
- google-maps - 谷歌地图街景标记根据有利位置更改位置
- azure - 如何在运行时创建(和删除)AzFunction
- javascript - 如何设置WEBM视频文件的FPS/播放速度?
- sql-server - MS Access 报告与记录集的连接
- sql - 雪花存储过程 While 函数