我在数据库中有这些数据:
+----+------------+---------+
| id | col1 | col2 |
+----+------------+---------+
| 1 | 3 | 2 |
| 2 | 2 | 3 |
| 3 | 4 | 5 |
+----+------------+---------+
我正在尝试进行查询,这会给我一个行数,其中的数字相同。 我知道其中一个值(数字)。
在这种情况下,相同的数字是 2 和 3 (列 col1 和 col2 ) - 我想从数据库号 2 (两行)中获取。我总是有两个数字中的一个 - 在这种情况下数字 3 。
可以做这个查询吗? 谢谢你的帮助。
答案 0 :(得分:2)
对于您指定的非常狭窄的情况,我会尝试这样做:
select count(*)
from myTable mt1
inner join myTable mt2 on (mt1.col1 = mt2.col2 AND mt2.col1 = mt1.col2)
and mt1.col1 = 3 --here goes the known value
这仅适用于您发布的数据。请告知我们以下情况的计数:
+----+------------+---------+
| id | col1 | col2 |
+----+------------+---------+
| 1 | 3 | 2 |
| 2 | 2 | 3 |
| 3 | 3 | 2 |
| 4 | 3 | 5 |
| 5 | 4 | 5 |
+----+------------+---------+
答案 1 :(得分:0)
你看起来像
SELECT (col1+col2) , COUNT(*) AS num_rows
FROM table1
WHERE col1 =3 OR col2 =3
GROUP BY (col1+col2)
HAVING num_rows >1
答案 2 :(得分:0)
使用此查询:
select count(*) count_rows
from table1
where col1=3 or col2=3
group by concat(IF(col1<col2, col1, col2), ',', IF(col1<col2, col2, col1))
你得到的结果是2
。
如果有另一个输入,则从where子句中的查询中替换3
。
对于记录1-2,concat(IF(col1<col2, col1, col2), ',', IF(col1<col2, col2, col1))
的值为"2,3"
,对于第三条记录,"4,5"
的值为{{1}}。