mysql某列多值查询

qq_26749295 2015-07-21 03:05:17
业务需求:根据前台输入的查询条件,匹配表中满足条件的数据。

表结构:其中fid是关联外键的值



例如,传进来的查询条件是a=12,b=13,c=14,f=16,那么满足的数据就只有fid=1的3条数据。(传入参数是不定的,可能会有多个)
请问sql怎么写才能同时满足某一个fid的所有条件?
...全文
383 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
道玄希言 2015-07-22
  • 打赏
  • 举报
回复
昨天好像是被你的图和说明给弄糊涂了.... 图上你划线部分, 显示的是四条纪录, 说明中说只有3条纪录符合. 我之前的语句, 查询出来应该也是三条纪录. 你说明条件里面, 是 f=16, 但是你后面单独的框框里面, 是 f=17...... 不过还是没有明白你到底想要表示个什么意思了. 比如数据: id fid cod nam vle 1 1 a a 12 2 1 b b 13 3 1 c c 14 4 2 d d 15 5 2 e e 16 6 3 f f 17 7 3 g g 18 条件是: a=12,b=13, f=17, g=18 这里是几条? 如果这里是四条, 那就是我之前的语句就OK了. 如果这里只有 fid = 3 这一条, (fid =1的有3条纪录, 实际查询到只有2条, 所以fid=1 不是) 那查询可以这么写:

SELECT A.* FROM tbl05 AS A
INNER JOIN
(
SELECT T1.fid FROM
(
SELECT fid, COUNT(fid) AS cfid FROM tbl05
WHERE 
(cod = 'a' AND vle = '12') OR 
(cod = 'b' AND vle = '13') OR 
(cod = 'c' AND vle = '14') OR 
(cod = 'f' AND vle = '16') 
GROUP BY fid 
) AS T1
INNER JOIN
(
SELECT fid, COUNT(fid) AS cfid, cod, nam, vle FROM tbl05 GROUP BY fid
) AS T2
ON T1.fid = T2.fid
WHERE T1.cfid = T2.cfid
) AS B
ON A.fid = B.fid
qq_26749295 2015-07-22
  • 打赏
  • 举报
回复
引用 2 楼 yangb0803 的回复:
額, 不对, 我这里包含了fid =3 的 fid = 3 的为啥不是? 你是根据什么来确定 fid 的?
额 就是要根据查询条件来确定属于哪一个fid
qq_26749295 2015-07-22
  • 打赏
  • 举报
回复
引用 2 楼 yangb0803 的回复:
額, 不对, 我这里包含了fid =3 的 fid = 3 的为啥不是? 你是根据什么来确定 fid 的?
额 就是要根据查询条件来确定属于哪一个fid
qq_26749295 2015-07-22
  • 打赏
  • 举报
回复
引用 5 楼 qq_26749295 的回复:
[quote=引用 2 楼 yangb0803 的回复:] 額, 不对, 我这里包含了fid =3 的 fid = 3 的为啥不是? 你是根据什么来确定 fid 的?
额 就是要根据查询条件来确定属于哪一个fid[/quote] 不好意思 没仔细看数据 是正确的;太感谢了
qq_26749295 2015-07-22
  • 打赏
  • 举报
回复
引用 5 楼 qq_26749295 的回复:
[quote=引用 2 楼 yangb0803 的回复:]
額, 不对, 我这里包含了fid =3 的
fid = 3 的为啥不是? 你是根据什么来确定 fid 的?
额 就是要根据查询条件来确定属于哪一个fid[/quote]

谢谢大神!!红色圈住的部分是为了后面的说明(传入参数是不定的,可能会有多个);举的例子里面满足条件的只有fid=1的数据,因为f=16这个传进来的条件不满足f=16的数据


条件是:
a=12,b=13, f=17, g=18
这里是几条?
如果这里是四条, 那就是我之前的语句就OK了. 这个满足条件的就只有f=17的数据才满足,测试了一下sql出来的数据是3条,fid=1,不是fid=3
ACMAIN_CHM 2015-07-21
  • 打赏
  • 举报
回复
引用
传进来的查询条件是a=12,b=13,c=14,f=16,那么满足的数据就只有fid=1的3条数据
显然没有哪个是满足这四个条件的。 建议楼主花时间详细描述需求。
道玄希言 2015-07-21
  • 打赏
  • 举报
回复
額, 不对, 我这里包含了fid =3 的 fid = 3 的为啥不是? 你是根据什么来确定 fid 的?
道玄希言 2015-07-21
  • 打赏
  • 举报
回复

select fid, code, .... from tbl  
where 
(code = 'a' and value = '12') or 
(code = 'b' and value = '13') or 
(code = 'c' and value = '14') or 
(code = 'f' and value = '16') 
多条不是太多, 就组合条件吧.

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧