连接中select语句中的where子句需要传递这些值而不进行硬编码,但我不能只放置TN.id1 = b.id1,TN.id2 = b.id2等。 ..在那个声明中,因为它无法绑定。
SELECT
a.DateCreated,
*
from B1 b
LEFT JOIN
(
SELECT
MIN(GGI.DATE) DateCreated,
GI.TEXT,
TN.ID1,
TN.ID2,
TN.ID3
FROM TABLENAME TN
LEFT JOIN GITEM GI ON
GI.SEQ_NBR = TN.SEQ_NBR
AND GI.STATUS = 'Approved'
WHERE
TN.ID1 = 'AP17'
AND TN.ID2 = '0'
AND TN.ID3 = '1'
GROUP BY GI.TEXT, TN.ID1, TN.ID2, TN.ID3
) a ON
b.ID1 = a.ID1
AND b.ID2 = a.ID2
AND b.ID3 = a.ID3
WHERE b.ID1 = 'AP17'
AND b.ID2 = '0'
AND b.ID3 = '1'
这可以在没有子查询的情况下重写吗?
我正在尝试做这样的事情(摘自上面的查询):
WHERE
TN.ID1 = b.ID1
AND TN.ID2 = b.ID2
AND TN.ID3 = b.ID3
GROUP BY GI.TEXT, TN.ID1, TN.ID2, TN.ID3
示例数据:
表中的“Table1”我只关心第一行。
ID1 ID2 ID3 Text
AP17 0 1 Red
AP17 0 2 Green
AP17 0 3 Blue
表“Table2” - 从该表中我需要使用与最后一个表中第一行匹配的所有“SEQ_NBR”行来获取下一个表中的数据。
ID1 ID2 ID3 SEQ_NBR
AP17 0 1 1
AP17 0 1 2
AP17 0 1 3
AP17 0 2 4
表“Table3” - 我想为每个不同类型的“Item”创建行,最早的日期是Status设置为“A”
SEQ_NBR Status Item DATE
1 I APPLE 12/05/17
2 A APPLE 12/10/17
3 A APPLE 12/13/17
1 A Cup 12/05/17
2 A Cup 12/10/17
3 A Cup 12/13/17
1 I Item3 12/05/17
2 I Item3 12/10/17
3 A Item3 12/13/17
我拉的数据看起来像是这样的,在“Table3”中总是有最早的日期,状态设置为“A”:
DateCreated ID1 ID2 ID3 Item
12/10/17 AP17 0 1 Apple
12/05/17 AP17 0 1 Cup
12/13/17 AP17 0 1 Item3
答案 0 :(得分:1)
很确定这是一个基本的聚合查询。这将返回所提供的样本数据的所需输出。
select DateCreated = MIN(MyDate)
, t2.ID1
, t2.ID2
, t2.ID3
, t3.Item
from Table1 t1
join Table2 t2 on t2.ID1 = t1.ID1
and t2.ID2 = t1.ID2
join Table3 t3 on t3.SEQ_NBR = t2.SEQ_NBR
and t3.Status = 'A'
group by t2.ID1
, t2.ID2
, t2.ID3
, t3.Item
答案 1 :(得分:0)
我相信你可以像这样重写。我猜错了一点,因为它并不是很明确,因为你说"重写我的查询以不使用上面的子查询"所以列出了所有要求。并且您的SQL只是通过id1,id2和id3获取特定结果。然后你给我们表格和要求改变为"这将始终具有最早的日期"表3"状态设置为" A""这不是你的SQL正在做什么。鉴于第二个要求并忽略了第一个要求:
SELECT
git.date,
table3.id1,
table3.id2,
table3.id3,
b1.text
FROM
gitem as git
INNER JOIN table3 ON
git.seq_nbr = table3.seq_nbr
INNER JOIN b1 ON
table3.id1 = b1.id1 AND
table3.id2 = b1.id2 AND
table3.id3 = b1.id3
WHERE
git.status = 'A' AND
git.date = (SELECT min(date) FROM gitem WHERE status='A')
这将拉出颜色,id1,id2,id3和日期,其中日期是第一个日期,状态为' A'。关于查询正在做什么似乎有点清楚,但它仍然使用子查询。只是根据您的要求,子查询才能找到正确的gitem
记录。