Хотите получить результаты двух запросов в одном запросе путем объединения этих запросов

0

Итак, у меня две таблицы, одна - A (order_id, order_group_id, name), а вторая - B (order_group_id, paid).

Таблица A содержит несколько записей:

order_id | order_group_id | name
----------------------------------
1        | 0              | A
----------------------------------
2        | 14             | B
----------------------------------
3        | 0              | C
----------------------------------
4        | 15             | D

Таблица B имеет несколько записей:

order_group_id | paid
--------------------------
14             | 0              
--------------------------
15             | 1

Теперь я запускаю эти два запроса:

SELECT order_id FROM A WHERE order_group_id = 0

а также

SELECT d.order_id FROM A as d, B as e WHERE d.order_group_id = e.order_group_id AND e.paid = 0

Первый запрос дает order_id 1 и 3.

Второй запрос дает order_id 2.

Итак, теперь, как получить результат обоих этих запросов в одном, также этот order_id должен быть в порядке возрастания.

Я буду очень благодарен вам, пожалуйста.

  • 0
    Неясно, что вы спрашиваете, в том смысле, что ваши два запроса делают разные вещи, и неясно, как они должны объединяться. Вам нужны все заказы, где order_id равен 0, или все заказы, где paid 0?
Теги:
codeigniter

3 ответа

1
Лучший ответ

Вы можете достичь этого, используя LEFT JOIN

В этом запросе будут возвращены все записи, которые либо paid is 0 либо paid is 0 либо order_group_id is 0

SELECT order_id, e.paid,  d.order_group_id FROM A as d
LEFT JOIN B as e ON d.order_group_id = e.order_group_id
WHERE e.paid = 0 OR d.order_group_id = 0

В codeignitor вы можете добиться следующего

$query = $this->select('SELECT order_id, e.paid,  d.order_group_id')->from('A as d')->join('B as e','d.order_group_id = e.order_group_id','LEFT')->where('e.paid = 0 OR d.order_group_id = 0')->get();

Демо: http://sqlfiddle.com/#!9/2b82f9/8

0
SELECT order_id FROM A WHERE order_group_id = 0
union
SELECT d.order_id FROM A as d, B as e WHERE d.order_group_id = e.order_group_id AND e.paid = 0
0

Вы можете связать две или более таблицы, используя INNER JOIN. И используйте ORDER BY (столбец) ASC/DESC, чтобы сделать восходящий или нисходящий порядок

SELECT order_id FROM A as d INNER JOIN B as e 
ON d.order_group_id = e.order_group_id
WHERE d.order_group_id = 0 AND e.paid = 0
ORDER BY order_id ASC
  • 0
    INNER JOIN используется, когда между таблицами есть совпадение, при этом пропускаются строки, которые хочет OP.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню