首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL中的左连接问题

MySQL中的左连接问题
EN

Stack Overflow用户
提问于 2010-12-03 17:10:08
回答 2查看 290关注 0票数 0

我的MySQL查询有一个小问题。我将左联接用于table1和table2。但是table2中的许多行可以与table1中的一行匹配。我知道当找到一个匹配行时,左联接停止搜索,但它似乎是随机执行的。即使我对table2进行排序,它也不会占用第一行。

你知道一个解决办法吗?

示例:

table1

代码语言:javascript
复制
date1      |
-----------
2010-10-10 |
2010-10-10 |
2010-10-10 |

table2

代码语言:javascript
复制
date2      | item
-------------------------
2010-10-09 | item1
2010-10-08 | item2
2010-10-07 | item3

SQL查询

代码语言:javascript
复制
SELECT * FROM table1 LEFT JOIN table2 ON date2<=date1

,我期待

代码语言:javascript
复制
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.

代码语言:javascript
复制
date1      | date2       | item
--------------------------------------
2010-10-10 | 2010-10-09  | item1
2010-10-10 | 2010-10-08  | item2
2010-10-10 | 2010-10-09  | item1
EN

回答 2

Stack Overflow用户

发布于 2010-12-03 17:11:52

我知道当它找到一个匹配行时,左联接停止搜索

Left根本做不到这一点。它返回所有匹配的行。如果您有行为,您无法解释张贴整个查询将帮助我们帮助您。

票数 0
EN

Stack Overflow用户

发布于 2010-12-03 18:29:51

您的示例数据不太容易处理,因为table1上没有PK,而且您有重复的数据,因此不能使用GROUP BY

这里有一种方法似乎有效,尽管我可能永远不会在实践中使用这种方法!

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4348008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档