给出一个sqlite数据库中的表 ID,名称,价值
ID不是唯一的,因为它可以有多个名称和值,而不是每个ID都具有相同的名称和值。
现在我需要查询此表,以便我可以找到多个匹配的名称值对,它们具有相同的ID。基本上搜索最匹配名称值对的id。
例如,我需要找到最符合以下名称值的ID。
+---------+--------+
| Name | Value |
+---------+--------+
| Product | Foobar |
| Colour | Blue |
+---------+--------+
来自等数据的
1, Product, Foobar
1, Colour, Blue
1, Size, Large
2, Product, Xeon
2, Colour, Blue
2, Size, Large
2, Type, inline
3, Product, Foobar
3, Colour, Green
3, Size, Large
4, Product, Xeon
4, Colour, Blue
4, Size, Small
5, Product, Foobar
5, Colour, Blue
5, Size, Small
6, Product, Argon
6, Layer, 1
6, Colour, Pink
并非所有项目都具有相同的名称,而有些名称则更少。
我可能愿意重组,如果这会有所帮助,可以通过LINQ查询
答案 0 :(得分:1)
此查询首先抛出任何与您的条件不符的记录,然后计算每个ID的剩余匹配数:
SELECT ID,
COUNT(*) AS matches
FROM MyTable
WHERE (Name = 'Product' AND Value = 'Foobar')
OR (Name = 'Colour' AND Value = 'Blue' )
GROUP BY ID
ORDER BY matches DESC
要仅获取第一个结果记录,请添加LIMIT 1
。
答案 1 :(得分:0)
扩展CL。的想法:
SELECT *
FROM MyTable
WHERE ID in (SELECT ID
FROM MyTable
WHERE (Name = 'Product' AND Value = 'Foobar')
OR (Name = 'Colour' AND Value = 'Blue' )
GROUP BY ID
HAVING COUNT(*) = 2)