SQL: Select 在特定列中具有特定值的帐户的所有行
SQL: Select all rows of the accounts which have certain value in a particular column
我在 table1 中有一些数据,格式如下:
ID1 ID2 Col3 Col4 ...
x1 a1 a
x1 a1 b
x1 a2 c
x2 a1 a
x2 a2 b
x2 a2 c
x3 a3 a
x3 a3 d
x4 a3 d
我想显示在 Col3 字段中具有 'a' 的帐户 (ID1+ID2) 的所有行。
所以输出应该看起来像
ID1 ID2 Col3 Col4 ...
x1 a1 a
x1 a1 b
x2 a1 a
x3 a3 a
x3 a3 d
这是我正在使用的查询:
SELECT *
FROM t1 table1
WHERE EXISTS
(
SELECT t2.ID1, t2.ID2
FROM t2 table1
where t1.ID1 = t2.ID1
AND t1.ID2 = t2.ID2
AND t2.Col3 = 'a'
)
这个查询花费了很多时间。有没有更快的方法?
谢谢!!
我找到了一个解决方案:
我正在处理的 table 有数百万行。因此查询花费了很多时间。我能够通过在 table 上执行主键索引来提高速度。
谢谢!! :)
你能更好地解释一下你想要什么吗?因为你的示例结果不像你说的那样(只有 'a' 在 col3 中)并且你的查询是多余的我认为查询和这将产生相同的结果:
SELECT * FROM t1 table1
您将获得所有结果
SELECT * FROM table1 WHERE col3 = 'a'
先试试这个:
SELECT DISTINCT a.*
FROM table1 AS a
JOIN table1 AS b
WHERE a.id1 = b.id1
AND a.id2 = b.id2
AND (a.col3 = 'a' or b.col3 = 'a')
如果不想要,请尝试以下原始操作:
SELECT *
FROM table1 AS a
JOIN table1 AS b
WHERE a.id1 = b.id1
AND a.id2 = b.id2
AND (a.col3 = 'a' or b.col3 = 'a')
我认为这可能是解决方案
SELECT *
FROM t1
WHERE ID1 IN (SELECT ID1 FROM t1 WHERE Col3 LIKE 'a')
解决方案 1
Select 来自第 1 列和来自第 2 列的匹配行但前提是 table 1 在 col3
[ 中包含正确的数据=22=]
SELECT ID1, ID2, Col3 FROM table1 LEFT JOIN table2 ON Table1.col3 = "a";
解决方案 2
Select 来自第 1 列和来自第 2 列的匹配行但前提是 table 1 和 table 2 包含 col3[=26= 中的正确数据]
SELECT ID1, ID2, Col3 FROM table1 LEFT JOIN table2 ON Table1.col3 = "a" AND Table2.col3 = a;
我在 table1 中有一些数据,格式如下:
ID1 ID2 Col3 Col4 ...
x1 a1 a
x1 a1 b
x1 a2 c
x2 a1 a
x2 a2 b
x2 a2 c
x3 a3 a
x3 a3 d
x4 a3 d
我想显示在 Col3 字段中具有 'a' 的帐户 (ID1+ID2) 的所有行。 所以输出应该看起来像
ID1 ID2 Col3 Col4 ...
x1 a1 a
x1 a1 b
x2 a1 a
x3 a3 a
x3 a3 d
这是我正在使用的查询:
SELECT *
FROM t1 table1
WHERE EXISTS
(
SELECT t2.ID1, t2.ID2
FROM t2 table1
where t1.ID1 = t2.ID1
AND t1.ID2 = t2.ID2
AND t2.Col3 = 'a'
)
这个查询花费了很多时间。有没有更快的方法?
谢谢!!
我找到了一个解决方案: 我正在处理的 table 有数百万行。因此查询花费了很多时间。我能够通过在 table 上执行主键索引来提高速度。
谢谢!! :)
你能更好地解释一下你想要什么吗?因为你的示例结果不像你说的那样(只有 'a' 在 col3 中)并且你的查询是多余的我认为查询和这将产生相同的结果:
SELECT * FROM t1 table1
您将获得所有结果
SELECT * FROM table1 WHERE col3 = 'a'
先试试这个:
SELECT DISTINCT a.*
FROM table1 AS a
JOIN table1 AS b
WHERE a.id1 = b.id1
AND a.id2 = b.id2
AND (a.col3 = 'a' or b.col3 = 'a')
如果不想要,请尝试以下原始操作:
SELECT *
FROM table1 AS a
JOIN table1 AS b
WHERE a.id1 = b.id1
AND a.id2 = b.id2
AND (a.col3 = 'a' or b.col3 = 'a')
我认为这可能是解决方案
SELECT *
FROM t1
WHERE ID1 IN (SELECT ID1 FROM t1 WHERE Col3 LIKE 'a')
解决方案 1
Select 来自第 1 列和来自第 2 列的匹配行但前提是 table 1 在 col3
[ 中包含正确的数据=22=]
SELECT ID1, ID2, Col3 FROM table1 LEFT JOIN table2 ON Table1.col3 = "a";
解决方案 2
Select 来自第 1 列和来自第 2 列的匹配行但前提是 table 1 和 table 2 包含 col3[=26= 中的正确数据]
SELECT ID1, ID2, Col3 FROM table1 LEFT JOIN table2 ON Table1.col3 = "a" AND Table2.col3 = a;