Как можно создать SQL запросы с JOIN и без JOIN

228
28 марта 2018, 02:37

Добрый день. Подскажите, пожалуйста, как можно создать SQL запросы с JOIN и без JOIN. Нужно вывести все записи из QUESTIONS, при условии (question_status = "approved") и если (question_user_id_from НЕ РАВНО NULL AND question_user_id_from = user_id) или (question_user_id_from РАВНО NULL AND question_user_id_from = user_id)

-------------------------------------------
QUESTIONS
-------------------------------------------
| question_status | question_user_id_from |
-------------------------------------------
| approved        | 111111                |
-------------------------------------------
| approved        | 111111                |
-------------------------------------------
| approved        | NULL                  |
-------------------------------------------
-------------
USERS
-------------
| user_id   |
-------------
| 111111    | 
-------------

Сделал подобный запрос, как описал в условии, начало выводить по 8 одинаковых результатов у кого question_user_id_from = NULL, при этом у кого question_user_id_from != NULL - вывело все записи. Вопрос, в том как сделать так чтобы выбирало в одному условии и в другом условии, при этом выводил и те и другие результаты.

UPDATE: Остановился на этом запросе, но он выводит очень много раз информацию где question_user_id_from = NULL (а надо выводить по одной записи), в зависимости от количества строк в таблице USERS.

(SELECT * FROM questions,users WHERE questions.question_status = "approved" AND questions.question_user_id_from IS NULL) UNION (SELECT * FROM questions,users WHERE questions.question_status = "approved" AND questions.question_user_id_from = users.user_id)

Answer 1

Допустим есть два таблицы. table1 и table2.

  1. Как соиденить таблицы без join

    select * from table1, table2  // Просто соиденить без условий
    select * from table1, table2 where table2.parent_id = table1.id
        // Соиденить при входжении одной таблицы в другую
  2. Как соиденить таблицы используя join

    select * from table1 
        /*left right inner*/ join table2 on table2.parent_id = table1.id
    select * from table1 cross join table2 
  3. Как соиденить используя union

    select id from table1 /*where условие 1*/
    union select parent_id from table2 /*where условие 2*/

    если table1 = table2 то можно переписать это в один select так

    select * from table1 where (/*условие1*/ id = 1)  or  (/*условие2*/ id = 2)
Answer 2

Вопрос сам решил. Для моих требований достаточно применить LEFT JOIN.

SELECT * FROM questions LEFT JOIN users ON (questions.question_user_id_from = users.user_id) WHERE questions.question_status = "approved"

READ ALSO
Не могу найти ошибку в коде, помогите

Не могу найти ошибку в коде, помогите

Что должно быть: 1Js отправляет на php сервер информацию из переменной $login 2

191
Как реализовать рандом с условием?

Как реализовать рандом с условием?

Есть рандом который видает цифры 0 или 1Нужно между 0 и 1 добавлять блок Angle_Left, а между 1 и 0 Angle_Top как сделать?

159
C# небольшая программа для отправки запросов и хранения данных

C# небольшая программа для отправки запросов и хранения данных

В общем суть заключается в создании небольшого приложения, которое подключается к сайту посредством кук и отправляет запросыПо мимо этого...

178
Некорректное отображение формы Windows Forms C#

Некорректное отображение формы Windows Forms C#

Проблема такая: после изменения размера формы и добавления пары элементов при запуске программы форма отображается меньше, чем нужноСвойство...

191