SQL INNER JOIN с НЕСКОЛЬКИМИ УСЛОВИЯМИ в CodeIgniter - PullRequest
0 голосов
/ 25 января 2019

У меня есть следующая таблица.

стол карты

------------------------------------
| card_no          | approval_code |
------------------------------------
| 999999xxxxxx1234 | 111111        |
 ----------------------------------
| 888888xxxxxx5678 | 222222        |
------------------------------------
| 777777xxxxxx9012 | 333333        |
 -----------------------------------
| 666666xxxxxx3456 | 444444        |
 -----------------------------------

таблица транзакции

---------------------------------------------
| trans_id | pan   | approval code  | amount |
---------------------------------------------
| A1       | 9012  | 333333         |     9.9|
----------------------------------------------
| A2       | 9012  | 333333         |    10.0|
----------------------------------------------
| B1       | 1233  | 111111         |    11.0|
----------------------------------------------
| B2       | 1234  | 111111         |    12.0|
----------------------------------------------
| C1       | 5678  | 222222         |    13.0|
----------------------------------------------
| C2       | 5678  | 444444         |    13.0|
----------------------------------------------

Мой вывод отображает 3 типа вывода. 1-й выход отображает сопоставленные данные, 2-й вывод отображает несогласованные данные из таблицы карточек, а 3-й вывод отображает сопоставленные данные из таблицы транзакций. Ниже приведены мои коды. в таблице транзакций хранится только pan (последние 4 цифры из card_no), поэтому мне нужно substr, чтобы получить последние 4 цифры.

для сопоставленных данных:

$query = $this->db->select (array(
'c.card_no', 'c.approval_code',
't.trans_id','t.pan','t.approval_code','amount'
),false)
-> join('transactions t','t.approval_code = c.approval_code','inner')
-> join('transactions t','t.pan = substr(c.card_no,12)','inner')
-> get('cards c');

для несогласованных данных с карточного стола;

$query = $this->db->select (array(
'c.card_no', 'c.approval_code',
't.trans_id','t.pan','t.approval_code','amount'
),false)
-> join('transactions t','t.approval_code != c.approval_code','inner')
-> join('transactions t','t.pan != substr(c.card_no,12)','inner')
-> where ('t.approval_code' IS NULL,NULL,FALSE)
-> where ('t.pan' IS NULL,NULL,FALSE)
-> get('cards c');

для несопоставленных данных из таблицы транзакций;

$query = $this->db->select (array(
'c.card_no', 'c.approval_code',
't.trans_id','t.pan','t.approval_code','amount'
),false)
-> join('cards c','t.approval_code = c.approval_code','inner')
-> join('cards c','t.pan != substr(c.card_no,12)','inner')
-> where ('c.approval_code' IS NULL,NULL,FALSE)
-> where ('c.card_no' IS NULL,NULL,FALSE)
-> get('cards c');

Оба, кажется, не работают .. хмммм мои ожидаемые результаты:

вывод согласованные данные

--------------------------------------------------------
| card_no          | approval_code | trans_id | amount |
--------------------------------------------------------
| 999999xxxxxx1234 | 111111        | B2       | 12.0   |
 -------------------------------------------------------
| 888888xxxxxx5678 | 222222        | C1       | 13.0   |
--------------------------------------------------------
| 777777xxxxxx9012 | 333333        | A1       | 9.9    |
 -------------------------------------------------------
| 777777xxxxxx9012 | 333333        | A2       | 10.0   |
 -------------------------------------------------------

вывод несопоставленные данные с настольных карт

------------------------------------
| card_no          | approval_code |
------------------------------------
| 666666xxxxxx3456 | 444444        |
 -----------------------------------

вывод несопоставленные данные из табличных транзакций

---------------------------------------------
| trans_id | pan   | approval code  | amount |
---------------------------------------------
| B1       | 1233  | 111111         |    11.0|
----------------------------------------------
| C2       | 5678  | 444444         |    13.0|
----------------------------------------------

1 Ответ

0 голосов
/ 25 января 2019

Чтобы получить несопоставленные данные из таблицы cards, замените join на right join. А для несопоставленных данных из таблицы transactions замените join на left join в соответствующих запросах.

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