Многостоловый запрос - PullRequest
       3

Многостоловый запрос

0 голосов
/ 20 марта 2012

Я довольно новичок в MYSQL.Я пытаюсь написать запрос, который будет искать по нескольким таблицам, но, похоже, оценивает только первое условие запроса.Я разработал следующий запрос:

SELECT DISTINCT user.user_id, user_netid, user_firstname, user_lastname, 
    user_dmid, user_insnum, instype_id, user_birthday, user_insapproved 
FROM user, signup, event 
WHERE  (user.instype_id = 3 OR user.instype_id = 4) 
    AND signup.signup_attended =1 AND signup.signup_timestamp >= 1325376000 
    AND (event.activity_id=37 OR event.activity_id=40 OR event.activity_id=5);

Я знаю, что он довольно длинный, но, как я уже сказал, я новичок в этом, и это было лучшее, что я мог придумать.В любом случае, кажется, что он оценивает только user.instype_id, потому что он дает мне записи, в которых signup.signup_attended! = 1 или любые другие условия, которые появляются после user.instype_id.Может кто-нибудь показать, пожалуйста, что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 20 марта 2012

Есть несколько вещей, которые необходимо исправить здесь.Каждое значение, к которому вы обращаетесь, должно быть связано с таблицей.Ваше первое значение «user.user_id» работает, но остальные не связаны с таблицей. (Если это имеет смысл).

Не могли бы вы предоставить макет таблиц, которые вы используете.

0 голосов
/ 20 марта 2012

Либо используйте синтаксис:

select * from user
join signup on user.userPrimaryKey=signup.userForeignKey
where conditions...

или

select * from user,signup
where user.userPrimaryKey=signup.userForeignKey AND condition...

Как сказал Марк Б, вы выполняете декартово соединение (каждая строка таблицы будет ассоциироваться со всеми строками другой таблицы)

0 голосов
/ 20 марта 2012

Я предполагаю, что это происходит из-за вашего перекрестного соединения (список таблиц с запятыми ... но без операторов объединения).По сути, вы можете отфильтровать пользователей по типу inst, но вы по-прежнему будете показывать пользователей с signup_attended, потому что таблица user и таблица signup не связаны, поэтому он просто начинает смешивать таблицы.Может быть, Википедия может объяснить кросс-соединение лучше, чем я :)как потом (с предположениями о столбцах соединения)

SELECT DISTINCT user.user_id, user_netid, user_firstname, user_lastname, 
    user_dmid, user_insnum, instype_id, user_birthday, user_insapproved 
FROM user
    JOIN signup
        ON signup.user_id = user.id
    JOIN event 
        ON event.signup_id = signup.id
WHERE  (user.instype_id = 3 OR user.instype_id = 4) 
    AND signup.signup_attended =1 AND signup.signup_timestamp >= 1325376000 
    AND (event.activity_id=37 OR event.activity_id=40 OR event.activity_id=5);

Выполните Google на SQL JOIN, и вы должны получить достаточно информации, объясняющей это. Вот один урок

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...