Задавайте вопросы, мы ответим
Вы не зашли.
К примеру, существуют три таблицы: user, attribute и attr_list
CREATE TABLE user (
user_key INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(40)
);
CREATE TABLE attribute (
attr_key INT UNSIGNED,
attr INT UNSIGNED
);
CREATE TABLE attr_list (
attr_key INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
attr VARCHAR(40)
);
Они созданны таким образом с одной целью - пользователь может задавать для себя атрибуты, которые в текстовом виде будут занесены в attr_list, а таблица attribute будет содержать ссылки межу конкретным пользователем и его атрибутами.
Так, например, attribute может выглядеть следующим образом:
attr_key attr
------------
0 1
0 2
1 1
2 1
2 2
Это означает, что существуют ровно три пользователя и у двух из них одинаковые атрибуты (пользователи 0 и 2).
Вопрос в том, как из таблицы user получить список пользователей имеющих определенные атрибуты.
Запрос:
SELECT DISTINCT user_key, name
FROM user, attribute
WHERE user_key=attr_key AND (attr=1 OR attr=2)
выводит три записи, т.е. для пользователе 0, 1 и 2, в то время как нужно получить список лишь из двух пользователей.
Прошу помочь составить верный запрос.
Заранее благодарен.
Неактивен
Только множественным объединением:
JOIN attribute a1 ON user.user_key = a1.attr_key
JOIN attribute a2 ON user.user_key = a2.attr_key
WHERE a1.attr = 1 AND a2.attr = 2
Не очень удачные названия столбцов
Неактивен
Искренне благодарен!
//Названия взяты для примера
Неактивен