我的MySQL查询有一个小问题。我将左联接用于table1和table2。但是table2中的许多行可以与table1中的一行匹配。我知道当找到一个匹配行时,左联接停止搜索,但它似乎是随机执行的。即使我对table2进行排序,它也不会占用第一行。
你知道一个解决办法吗?
示例:
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 | item3SQL查询
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发布于 2010-12-03 17:11:52
我知道当它找到一个匹配行时,左联接停止搜索
Left根本做不到这一点。它返回所有匹配的行。如果您有行为,您无法解释张贴整个查询将帮助我们帮助您。
发布于 2010-12-03 18:29:51
您的示例数据不太容易处理,因为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
) thttps://stackoverflow.com/questions/4348008
复制相似问题