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