说,我有两个表T1和T2(在sql中)。我只想保留T1中的行,这些行在这些表之间具有相同的列值。我该怎么办!?
这里T1.Status和T2.Status包含相同的值,我只想保留T1中的这两行,从T1中删除其他行。
怎么可能(查询速度更快,因为将有成千上万的行)!答案 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);