ПРИСОЕДИНЯЙТЕСЬ, КОГДА НУЛЬ (mysql) - PullRequest
2 голосов
/ 26 апреля 2019

Я хочу объединить 2 таблицы (таблица A и таблица B). Если таблица B пуста, вместо нее используется 0. Можно ли запросить это в MySQL?

Пусть: Таблица А:

id        regionID 
123         1        
456         2        
789         3        

Таблица B:

regionId Rate
0        $5
1        $10

Результат, который я хочу получить:

id        regionID rate
123         1       $10
456         2        $5
789         3        $5

Мой запрос в соединении в основном такой:

Table_a a LEFT join table_b b
ON a.region_id = IFNULL(b.region_id,0)

Однако мне кажется, что "ifnull" не оказывает никакого влияния на мой запрос

Ответы [ 4 ]

2 голосов
/ 26 апреля 2019

Проверьте, работает ли у вас следующий SQL:

SELECT a.id
,      a.regionID
,      b.rate
FROM table_a a 
LEFT JOIN table_b b ON a.regionID = b.regionID 
    OR (b.regionID = 0 AND not EXISTS (select * from table_b b1 where b1.regionID = a.regionID))
order by a.id

Примечание: условие после условия OR говорит, что a.regionID не существует в table_b, тогда используйте b.regionID = 0.

2 голосов
/ 26 апреля 2019

Попробуйте использовать вложенный запрос, чтобы сначала найти то, что соответствует, а остальные - обнулить.Обычно я не использую mySQL, поэтому мой синтаксис может быть отключен.

select t.regionID, b.Rate
from 
(select a.regionID, b.regionID as 'b_region'
 from table_a a 
 left join table_b b
      on a.regionID = b.regionID) t
left join table_b b
     on IFNULL(t.b_region, 0) = b.regionID 
1 голос
/ 26 апреля 2019

Это почти похоже на решение Михаэля З.:

SELECT r.ID,r.Region_ID,b.Rate FROM
(SELECT a.ID,a.Region_ID,ifnull(b.region_id,0) AS bRegID 
FROM table_a a 
LEFT JOIN table_b b 
on a.region_id=b.region_id) r
LEFT JOIN table_b b ON r.bregid=b.region_ID
Order by r.Region_ID;

Здесь скрипка: Скрипка

0 голосов
/ 26 апреля 2019

Вы, кажется, хотите:

select a.companyID, a.regionID, a.status, b.rate
from table_a a left join
     table_b b
     on a.company_id = b.company_id;

region не кажется необходимым для вашего join.

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