У меня небольшая проблема с моим MySQL-запросом. Я использую LEFT JOIN для table1 и table2. Но многие строки в таблице2 могут соответствовать одной строке в таблице1. Я знаю, что LEFT JOIN перестает искать, когда находит одну строку соответствия, но, похоже, делает это случайным образом. Даже когда я сортирую таблицу2, она не принимает первую строку соответствия.
Вы знаете, может быть, решение?
Пример:
table1
date1 |
-----------
2010-10-10 |
2010-10-10 |
2010-10-10 |
table2
date2 | item
-------------------------
2010-10-09 | item1
2010-10-08 | item2
2010-10-07 | item3
SQL-запрос
SELECT * FROM table1 LEFT JOIN table2 ON date2<=date1
Я ожидаю
date1 | date2 | item
--------------------------------------
2010-10-10 | 2010-10-09 | item1
2010-10-10 | 2010-10-09 | item1
2010-10-10 | 2010-10-09 | item1
, но я получаю f.e
date1 | date2 | item
--------------------------------------
2010-10-10 | 2010-10-09 | item1
2010-10-10 | 2010-10-08 | item2
2010-10-10 | 2010-10-09 | item1
Ваши данные с примерами не очень легко работать, поскольку на table1
нет PK, и у вас есть дубликаты, поэтому GROUP BY
не может быть использован.
Вот подход, который, кажется, работает, хотя я бы никогда не использовал его на практике!
create table table1 (date1 DATE);
create table table2(date2 DATE, item varchar(10));
insert into table1
SELECT CAST('2010-10-10' AS DATE) AS date1 UNION ALL
SELECT CAST('2010-10-10' AS DATE) AS date1 UNION ALL
SELECT CAST('2010-10-10' AS DATE) AS date1;
insert into table2
SELECT CAST('2010-10-09' AS DATE) AS date2, 'item1' AS item UNION ALL
SELECT CAST('2010-10-08' AS DATE) AS date2, 'item2' AS item UNION ALL
SELECT CAST('2010-10-07' AS DATE) AS date2, 'item3' AS item;
SELECT
date1,
cast(left(Top,10) as date) AS date2,
cast(substring(Top,11) as char) AS item
FROM
(
SELECT date1,
(SELECT CONCAT(date2,item) FROM table2 WHERE date2<=date1 ORDER BY date2 DESC LIMIT 1) AS Top
FROM table1
) t
Я знаю, что LEFT JOIN перестает искать когда он находит одну строку соответствия
Левое соединение не делает этого вообще. Он возвращает все соответствующие строки. Если у вас возникло поведение, вы не можете объяснить, что публикация всего запроса поможет нам вам помочь.
GROUP BY
? Это может объяснить недетерминированный результат в MySQL. Каков ваш точный запрос?