【发布时间】:2015-07-07 11:17:17
【问题描述】:
这是我的数据库:bott_no_mgmt_data
random_no ; company_id ; bottle_no ; date ; returned ; returned_to_stock ; username
30201 ; MY COMP ; 1 ; 2015-04-28 ; 10 ; NULL ; ANDREW
30202 ; MY COMP ; 2 ; 2015-04-28 ; 10 ; NULL ; ANDREW
30205 ; MY COMP ; 5 ; 2015-04-28 ; 10 ; NULL ; ANDREW
30208 ; MY COMP ; 8 ; 2015-04-28 ; 10 ; NULL ; ANDREW
30209 ; MY COMP ; 9 ; 2015-04-28 ; 10 ; NULL ; ANDREW
30210 ; MY COMP ; 10 ; 2015-04-28 ; 10 ; NULL ; ANDREW
30211 ; MY COMP ; 1 ; 2015-04-29 ; 20 ; NULL ; ANDREW
30212 ; MY COMP ; 2 ; 2015-04-29 ; 20 ; NULL ; ANDREW
30213 ; MY COMP ; 9 ; 2015-04-29 ; 30 ; NULL ; ANDREW
30214 ; MY COMP ; 10 ; 2015-04-29 ; 30 ; NULL ; ANDREW
我已成功从bott_no_mgmt_data 中提取所有唯一行,其中random_no 字段最高,bottle_no 是唯一的,代码如下:
select yt.*
from bott_no_mgmt_data yt<br>
inner join(select bottle_no, max(random_no) random_no
from bott_no_mgmt_data
WHERE username = 'ANDREW'
group by bottle_no) ss on yt.bottle_no = ss.bottle_no
and yt.random_no = ss.random_no
where returned < 15 and date > '2015-04-01'
因此,例如它返回的行之一将是
30214;MY COMP;10;2015-04-29;30;NULL;ANDREW
而不是
30210;MY COMP;10;2015-04-28;10;NULL;ANDREW
因为虽然它们的bottleno 相同,但前者的 random_no 更高。
我的问题:
我现在希望将每个返回的行 'bottleno' 与另一个表 'sample' 进行比较,该表仅包含字段 'bottleno' 和瓶号列表。我希望比较它们并且只返回那些匹配的。我假设我们然后将上面的结果与数据库'sample''LEFT JOIN'如下:
select yt.* from bott_no_mgmt_data yt<br>
inner join(select bottle_no, max(random_no) random_no
from bott_no_mgmt_data WHERE username = 'ANDREW'
group by bottle_no) ss on yt.bottle_no = ss.bottle_no and yt.random_no = ss.random_no
where returned < 15 and date > '2015-04-01'
LEFT JOIN sample ON sample.bottleno = yt.bottle_no
额外的左连接给我一个错误
1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 7 行的“LEFT JOIN sample ON sample.bottleno = yt.bottleno WHERE sample.bottleno IS NULL”附近使用正确的语法
【问题讨论】:
-
在
WHERE子句之后执行左连接。 -
谢谢Dan,但它肯定必须在where子句之后吗?仅在使用 where 原因查询表 A 后,我才比较表 A 和表 B 的结果?
-
您的原始查询返回第 30205 和 30208 行