mysql in子查询语句_MySQL的使用IN/FIND_IN_SET读取子查询

CREATE TABLE locations (

location_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

name VARCHAR(63) UNIQUE NOT NULL

);

INSERT INTO locations (name)

VALUES

('london'),

('bristol'),

('exeter');

CREATE TABLE location_groups (

location_group_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

location_ids VARCHAR(255) NOT NULL,

user_ids VARCHAR(255) NOT NULL,

name VARCHAR(63) NOT NULL,

);

INSERT INTO location_groups (location_ids, user_ids, name)

VALUES

('1', '1,2,4', 'south east'),

('2,3', '2', 'south west');

我所试图做的是返回所有location_ids所有在给定的USER_ID的location_groups的存在。我正在使用CSV将location_ids和user_ids存储在location_groups表中。我知道这是不正常的,但这是数据库是如何,它是我的控制。

我当前的查询是:

SELECT location_id

FROM locations

WHERE FIND_IN_SET(location_id,

(SELECT location_ids

FROM location_groups

WHERE FIND_IN_SET(2,location_groups.user_ids)))

现在,如果USER_ID = 1为例(因为只有1 location_group返回行),但如果我搜索USER_ID = 2,我得到一个错误能正常工作说子查询返回多于1行,预计用户2在2个location_groups。我明白为什么错误会被抛出,我正在努力解决如何解决它。

要在location_groups.user_ids的LOCATION_ID 1应返回USER_ID 1搜索时澄清。当搜索user_id 2时,应该返回location_ids 1,2,3。

我知道这是一个复杂的查询,所以如果你有什么不太清楚的只是让我知道。任何帮助,将不胜感激!谢谢。

+0

不要放弃!争取正常化! –

2012-01-17 19:25:11

+1

适当的[示例代码](http://sscce.org/)(这里,SQL语句)比任何ad hoc模式和示例数据格式更有用。请使用'CREATE TABLE'和'INSERT ... VALUES'作为样本。所需的结果不需要作为示例代码呈现,因为结果是代码的输出,而不是代码本身。 –

2012-01-17 19:29:01

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值