mysql:从表中选择匹配组合的所有行,反之亦然

z9smfwbn  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(309)

我的table看起来像这样

ID - col1 - col2
=====================
1  - 115  -  3
2  - 3    -  115
3  - 110  -  121
4  - 12   -  115
5  - 115  -  121
6  - 115  -  65

我想选择所有行 col1 = 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

我希望我说清楚了`

unhi4e5o

unhi4e5o1#

您需要将表连接到自身,称为“自连接”。查询返回表的第一个示例中的所有数据,但只联接与第一个示例相反的第二个示例中的记录。因此,如果存在反向匹配,则所有联接列中都将有数据,如果不存在反向匹配,则id、col1和col2将在联接列上返回null数据。然后,使用“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;

注意,我们在join中匹配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);

相关问题