我有两个问题。
第一个是..
INSERT INTO balik
( balik_date,
balik_time,
balik_cardID,
balik_status,
balik_type )
select
current_date(),
'00:00:00',
L_CardID,
'BELUM BALIK',
L_Type
FROM
logdetail t1
LEFT JOIN balik t2
ON t1.L_CardID = t2.balik_cardID
WHERE
t1.L_Type = 'IN'
and t1.L_Date = current_date()
AND t2.balik_cardID IS NULL"
另一个是......
UPDATE balik blk
INNER JOIN logdetail ld
ON blk.balik_cardID = ld.L_CardID
and blk.balik_date = current_date()
SET
blk.balik_status = 'SUDAH BALIK',
blk.balik_type = 'OUT',
blk.balik_time = ld.L_Time
WHERE
ld.L_Type = 'OUT'
and ld.L_Date = current_date()
我的问题是,当我执行第一个和第二个查询时,没有任何事情发生,除非我事先删除了我的表中的所有记录。在这种情况下,两个查询都会被执行并像魅力一样工作。
为什么会这样?
答案 0 :(得分:0)
从我记忆中,你不能插入一个表格,这是一个查询的结果,可能会影响你插入的内容...所以,如果选择被“包裹”,它可能会有帮助在另一个图层中,因此内部查询首先完全处理,因此不会受到插入的影响。
INSERT INTO balik
( balik_date,
balik_time,
balik_cardID,
balik_status,
balik_type )
select
PreQuery.newDate,
PreQuery.newTime,
PreQuery.newCardID,
PreQuery.newStatus,
PreQuery.newType
from
( select
current_date() newDate,
'00:00:00' newTime,
L_CardID newCardID,
'BELUM BALIK' newStatus,
L_Type newType
FROM
logdetail t1
LEFT JOIN balik t2
ON t1.L_CardID = t2.balik_cardID
WHERE
t1.L_Type = 'IN'
and t1.L_Date = current_date()
AND t2.balik_cardID IS NULL" ) PreQuery
我会更改更新的语法,以更接近地匹配每个文档的SQL语法的语法...列出以逗号分隔的表,然后在WHERE子句中应用连接条件
UPDATE balik blk, logdetail ld
SET
blk.balik_status = 'SUDAH BALIK',
blk.balik_type = 'OUT',
blk.balik_time = ld.L_Time
WHERE
blk.balik_cardID = ld.L_CardID
and blk.balik_date = current_date()
and ld.L_Type = 'OUT'
and ld.L_Date = current_date()
是的,基本上是一样的,但可能是解释问题。