@maximilianoarturo

Как правильно составить SQL запрос?

Есть 2 таблицы
user
id | name
user_info
id | user_id | some_id

Необходимо составить запрос, который выведет всех юзеров, которые имеют some_id равный 1 и 2

CREATE TABLE IF NOT EXISTS `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;

--
-- Дамп данных таблицы `user`
--

INSERT INTO `user` (`id`, `name`) VALUES
(1, 'user1'),
(2, 'user2'),
(3, 'user3'),
(4, 'user4'),
(5, 'user4');

-- --------------------------------------------------------

--
-- Структура таблицы `user_info`
--

CREATE TABLE IF NOT EXISTS `user_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `some_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;

--
-- Дамп данных таблицы `user_info`
--

INSERT INTO `user_info` (`id`, `user_id`, `some_id`) VALUES
(1, 1, 1),
(2, 1, 2),
(3, 2, 1),
(4, 3, 2),
(5, 4, 1),
(6, 4, 2),
(7, 5, 2),
(8, 5, 3);
  • Вопрос задан
  • 297 просмотров
Решения вопроса 2
Winsik
@Winsik
сис.админ, недопрограммист :)
BEGIN TRANSACTION;
drop table tuser;
drop table tuser_info;
CREATE TABLE tuser
	(`id` int, `name` varchar(255));
	
INSERT INTO tuser
	(`id`, `name`)
VALUES
	(1, 'Vasja'),
	(2, 'Petja'),
	(3, 'Kolja'),
	(4, 'Dima')
;
CREATE TABLE tuser_info
	(`id` int, `user_id` int, `some_id` int);
	
INSERT INTO tuser_info
	(`id`, `user_id`, `some_id`)
VALUES
	(1, 1,1),
	(2, 2,3),
	(3, 2,1),
	(5, 2,2),
	(4, 3,1)
;
COMMIT;

select tu.name
from tuser tu 
join tuser_info ti 
on (tu.id = ti.user_id)
where ti.some_id=1 
and exists (select 1 from tuser_info ti2 where ti2.some_id=2 and ti2.user_id=ti.user_id );
Ответ написан
@dmitryKovalskiy
программист средней руки
SELECT u.* 
FROM user u
INNER JOIN user_info ui1 ON u.id = ui.user_id and ui.some_id = 1
INNER JOIN user_info ui1 ON u.id = ui.user_id and ui.some_id = 2

Попробуйте так
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@IceJOKER
Web/Android developer
Как-то так:
SELECT u.* 
FROM user u
INNER JOIN user_info ui ON u.id = ui.user_id
WHERE ui.some_id = 1 AND ui.some_id = 2;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы