mysql - MYSQL:从匹配组合的表中选择所有行,反之亦然
问题描述
我的桌子看起来像这样
ID - col1 - col2
=====================
1 - 115 - 3
2 - 3 - 115
3 - 110 - 121
4 - 12 - 115
5 - 115 - 121
6 - 115 - 65
我想选择所有行 WHEREcol1 = 115
这将输出一个所有行匹配 115 的简单表,所以我做了
SELECT * from myTable WHERE col1= 115
这是最容易的部分。现在,与此同时,我需要以某种方式标记在这种情况下与相反值匹配的所有行`
3 和 115,假设 115 和 3 也存在
并不是说我不会“标记” 12 | 115 因为 115|12 不存在
所需的输出应该是
ID - col1 - col2 - mark
========================
1 - 115 - 3 - true
5 - 115 - 121 - false
6 - 115 - 65 - false
我希望我说清楚了......`
解决方案
您需要将表连接到自身,称为“自连接”。该查询返回表的第一个实例中的所有数据,但只连接第二个实例中与第一个实例相反的记录。因此,在存在反向匹配的情况下,所有连接列中都会有数据,而在没有反向匹配的情况下,ID、col1 和 col2 将在连接列上返回空数据。然后,使用“if”语句在连接数据上查找空值)。请参见下面的代码:
SELECT
nt1.ID,
nt1.col1,
nt1.col2,
if(ID.col1 IS NULL, 'False', 'True') AS `Mark`
FROM
new_test AS nt1
LEFT OUTER JOIN
new_test AS nt2
ON
(
nt1.col1 = nt2.col2
AND
nt1.col2 = nt2.col1
)
WHERE
nt1.col1 = 115;
请注意,我们将连接中的 col1 与 col2 进行匹配,这将为您提供反转的数字。
我用来设置测试的代码:
DROP TABLE IF EXISTS new_test;
CREATE TABLE IF NOT EXISTS new_test (
id int not null,
col1 int,
col2 int
);
INSERT INTO new_test (ID, col1, col2)
VALUES
(1,115,3),
(2,3,115),
(3,110,121),
(4,12,115),
(5,115,121),
(6,115,65);
推荐阅读
- python - 将全局变量分配给函数的局部变量
- r - R中的ifelse语句用法
- reactjs - 编译失败。react-router 3 中未定义“Greeting”
- android - 使用 Angular 和 Android Studio 的混合移动应用程序
- c# - 网页从 Xamarin App 中的 webview 中弹出
- html - 从 PrimeNG 中的 tabView 中删除边框
- javascript - 从网站调用事件 - 使用 VBA 到 Internet Explorer
- c# - 绑定到 ReactiveUserControl.ViewModel 不会设置 ViewModel
- dart - Dart - 我如何将字符串和整数映射在一起?
- typescript - 有没有办法在不使用数组文字类型表示法的情况下声明一个元组?