有一个MYSQL查找表,它返回多个格式(points_id)的多个终结者(N)中某个地点(P)收到的点数。不同的点结构用于不同的事件。有时候获得的分数取决于终结者的数量(N)有时他们没有。 这是表的简短版本,有两个样本结构。 points_id -1这些点取决于N Point_id -2,这些点没有。
分
points_id | P | N | points |
1 | 1 | 3 | 90 |
1 | 1 | 2 | 85 |
1 | 1 | 1 | 80 |
1 | 2 | 3 | 60 |
1 | 2 | 2 | 50 |
1 | 3 | 3 | 30 |
3 | 1 | | 100 |
3 | 2 | | 90 |
3 | 3 | | 80 |
3 | 3 | | 70 |
所以我的问题: 1)有没有办法将通配符放在表数据中。 例如,如果显示空白的N列中有一个% 我做了这个查询。
SELECT points from t1 WHERE points_id=3 and P=3 and N=2
它会返回96 ?? PS我知道这不起作用,但显示了我的想法。
2)我希望它快,可以把它放在一个程序中用于更大的查询。我猜测,除非有一个非常简单的方法来做我上面显示的。最快的方法是在points_id = 3的情况下为所有不同的N提供行。这是真的吗?
答案 0 :(得分:0)
您可以考虑UNION ALL:
SELECT points from t1 WHERE points_id=3 AND P=3
UNION ALL
SELECT points from t1 WHERE points_id=3 AND N=2
无论P = 3还是N = 2,都会得到结果。我复制了你的数据库模式并尝试了这个,它产生了:
points
------
80
70
如果您确实想要快速处理大量数据 - 您真的希望拥有索引和/或主键。
答案 1 :(得分:0)
试试这个:
SELECT points from t1 WHERE points_id=3 and P=3 and (N=2 OR (IFNULL(N,'')=''))
// dataType of N varchar
SELECT points from t1 WHERE points_id=3 and P=3 and (N=2 OR (IFNULL(N,0)=0))
// dataType of N numeric type
让我知道是否有任何改变或错误