用于选择记录的SQL代码,其中field_A与某个field_B值的field_A值匹配

时间:2019-06-13 11:24:37

标签: mysql sql

我有这张桌子

ID  Email
aa  aa@gmail.com
aa  aa@yahoo.com
bb  bb@gmail.com
cc  cc@hotmail.com

使用SQL代码,我想选择所有ID与电子邮件aa@gmail.com的ID相同的记录。因此它将返回:

aa  aa@gmail.com
aa  aa@yahoo.com

我知道我们可以选择其中field_A是某个值的记录,如下所示:

SELECT * FROM tablename WHERE ID="aa"

如何修改此代码以获得所需的结果?

5 个答案:

答案 0 :(得分:3)

您可以使用子查询:

SELECT t.*
FROM tablename t
WHERE t.ID = (SELECT t2.id
              FROM tablename t2
              WHERE t2.email = 'aa@gmail.com'
             );

答案 1 :(得分:2)

select * from tablename where id in (
    SELECT ID AS count FROM tablename GROUP BY ID HAVING COUNT(ID) > 1
) 

答案 2 :(得分:1)

使用JOIN相同的表ON ID,结果是可能的:

SELECT T1.ID, T2.Email 
FROM TableName T1
JOIN TableName T2 ON T2.ID = T1.ID
WHERE T1.Email = 'aa@gmail.com'

Demo on db<>fiddle

答案 3 :(得分:0)

您可以使用SUBSTRING_INDEX

SELECT * FROM tablename WHERE ID=SUBSTRING_INDEX(`Email`, '@', 1) and Email='aa@gmail.com'

答案 4 :(得分:0)

与其进行硬编码,它应该在求值后返回值

CREATE TABLE TestTable (ID VARCHAR(5), Email VARCHAR (20));

INSERT INTO TestTable (ID, Email) VALUES
('aa', 'aa@gmail.com'),
('aa', 'aa@yahoo.com'),
('bb', 'bb@gmail.com'),

SELECT *
FROM TestTable
WHERE ID  IN 
(
SELECT CASE WHEN ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID)>1 THEN ID END AS ID
FROM TestTable
)