我在表1中有一些数据:
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'
)
此查询花费了大量时间。有更快的方法吗?
谢谢!
我找到了一个解决方案: 我工作的表有数百万行。因此查询花了很多时间。我能够通过在两个表上执行主键索引来提高速度。
谢谢! :)
答案 0 :(得分:0)
你能更好地解释你想要的吗?因为你的示例结果看起来不像你说的那样(col3中只有'a')并且你的查询是多余的我认为这个查询会产生相同的结果:
SELECT * FROM t1 table1
您将使用
获取所有结果SELECT * FROM table1 WHERE col3 = 'a'
答案 1 :(得分:0)
首先尝试:
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')
答案 2 :(得分:0)
我认为这可能是解决方案
var messageReceivedCallBack = {
onMessageReceived: function (message) {
console.log('Message received ' + message);
}
};
答案 3 :(得分:0)
从第1列中选择并匹配第2列中的行,但仅当表1包含col3中的正确数据时
SELECT ID1, ID2, Col3 FROM table1 LEFT JOIN table2 ON Table1.col3 = "a";
从第1列中选择并匹配第2列中的行,但仅当表1和表2包含col3中的正确数据时
SELECT ID1, ID2, Col3 FROM table1 LEFT JOIN table2 ON Table1.col3 = "a" AND Table2.col3 = a;