我正在尝试进行SQl查询(MS Access)并且仅返回Like
个字段,类似于iTunes,您可以在其中选择多首歌曲,然后在编辑各自的数据时,您可以过滤输出每首选定歌曲不共享的数据。
例如,我有一个类似于
的表ID,date,weight,buyerid
123,21/07/2014,5,22
124,21/07/2014,5,23
125,22/08/2014,5,23
如果我搜索所有三个ID(123
,124
和125
)的相似结果,我只会在weight
列下收到数据,因为所有三个选项都具有相同的weight
。同样,如果我使用ID
s 123
和124
进行搜索,则会返回date
和weight
值,因为ID
的共享那些数据值。不相似的数据会返回null
或没有结果。
这在单个查询中是否可行?
编辑: rephrase(尽我所能解释)...我想搜索一个数据表(多个字段),只收到一行结果。通常类似的搜索会返回多行,其中一些字段包含相同的数据,而其他字段则没有,但我希望它过滤后只返回一行,其中包含每个字段中所有结果相同的数据(如果不相同则不返回任何内容) )。
我的另一个选择是遍历标准查询并拉出与每个字段匹配的所有数据,但我希望它可以在单个SQL查询中完成。
希望更好。
答案 0 :(得分:0)
我认为你正在寻找这样的东西(假设你的表名为Table1):
SELECT t1.SharedAttributes
FROM
(
SELECT ID, CStr([Weight]) AS SharedAttributes
FROM Table1
WHERE ID IN (123, 124)
UNION ALL
SELECT ID, CStr([Date]) AS SharedAttributes
FROM Table1
WHERE ID IN (123, 124)
) t1,
(
SELECT COUNT(*) AS DistinctIDs
FROM (SELECT DISTINCT ID FROM Table1 WHERE ID IN (123, 124))
) t2
GROUP BY t1.SharedAttributes, t2.DistinctIDs
HAVING COUNT(*) = t2.DistinctIDs;
这会产生:
SharedAttributes
21/07/2014
5
虽然:
SELECT t1.SharedAttributes
FROM
(
SELECT ID, CStr([Weight]) AS SharedAttributes
FROM Table1
WHERE ID IN (123, 124, 125)
UNION ALL
SELECT ID, CStr([Date]) AS SharedAttributes
FROM Table1
WHERE ID IN (123, 124, 125)
) t1,
(
SELECT COUNT(*) AS DistinctIDs
FROM (SELECT DISTINCT ID FROM Table1 WHERE ID IN (123, 124, 125))
) t2
GROUP BY t1.SharedAttributes, t2.DistinctIDs
HAVING COUNT(*) = t2.DistinctIDs;
产生
SharedAttributes
5
代码有点丑陋多次使用相同的WHERE子句,但我不认为它可以帮助。另一种方法是将所有搜索到的ID放到一个表中,而不是WHERE子句,INNER JOIN到每个查询中的表。另外,需要注意的是:因为您希望将所有结果放在一列中,所以我们必须将所有值转换为通用数据类型;在这种情况下,字符串。