如何使行包含两个表之间特定列的相同值

时间:2018-09-23 20:14:57

标签: php mysql sql

说,我有两个表T1和T2(在sql中)。我只想保留T1中的行,这些行在这些表之间具有相同的列值。我该怎么办!?

Please have a look

这里T1.Status和T2.Status包含相同的值,我只想保留T1中的这两行,从T1中删除其他行。

怎么可能(查询速度更快,因为将有成千上万的行)!

2 个答案:

答案 0 :(得分:1)

这是我的示例创建查询:

CREATE TABLE `T1` (
  `name` VARCHAR(45) NOT NULL,
  `id` VARCHAR(45) NULL,
  `status` VARCHAR(45) NULL,
  PRIMARY KEY (`name`));

INSERT INTO T1 (name, id, status) VALUES
('x1', 1, 1),
('x2', 2, 1),
('x3', 3, 1),
('x4', 4, 1);

CREATE TABLE `T2` (
  `name` VARCHAR(45) NOT NULL,
  `email` VARCHAR(45) NULL,
  `status` VARCHAR(45) NULL,
  PRIMARY KEY (`name`));

INSERT INTO T2 (name, email, status) VALUES
('x1', 'a', 1),
('x2', 'b', 1),
('x3', 'c', 3),
('x4', 'd', 4);

然后您要从T1中选择名称和状态与T2中相同的所有行:

SELECT
    1.*
FROM
    T1
    JOIN T2 ON T2.name = T1.name AND T2.status = T1.status; 

答案 1 :(得分:1)

NOT EXISTS和相关的子查询可用于检查是否不存在匹配的记录。

DELETE FROM t1
            WHERE NOT EXISTS (SELECT *
                                     FROM t2
                                     WHERE t2.name = t1.name
                                           AND t2.status = t1.status);