我需要做這樣的事情,以填補部分表:一個問題關於JOIN
SELECT (CASE t1.part IS NULL THEN t2.part ELSE t1.part END) AS partno,
t3.desc
FROM t1
LEFT JOIN join t2 ON [certain condition]
LEFT JOIN t3 ON t1.part = t3.part
OR t2.part = t3.part
...所以這將選擇的情況下,從T2 PARTNO價值的那部分是在T1空,則我需要從t3的描述,但是當我運行它需要永遠,永遠不會返回結果,我怎樣才能更快地做到這一點?如果我錯過了一些細節,請詢問。
這是表
alt text http://img15.imageshack.us/img15/3878/74385879.png
這是實際的程序
DELIMITER $$
DROP PROCEDURE IF EXISTS `getMonthDetail` $$
CREATE DEFINER=`root`@`%` PROCEDURE `getMonthDetail`(fechai Date, wid int)
BEGIN
select distinct
ins.inventoryinid,
(
select group_concat(concat(documents.documentname,': ', inventoryin_documents.documentno))
from inventoryin_documents
left join documents on documents.documentid=inventoryin_documents.documentid
where inventoryin_documents.inventoryinid = docin.inventoryinid
group by inventoryin_documents.inventoryinid
)as docin,
trace.inventoryoutid,
(
select group_concat(concat(documents.documentname,': ', inventoryout_documents.documentno))
from inventoryout_documents
left join documents on documents.documentid=inventoryout_documents.documentid
where inventoryout_documents.inventoryoutid = docout.inventoryoutid
group by inventoryout_documents.inventoryoutid
) as docout,
outs.inventoryoutdate,
(case when trace.partnumberp is null then indetails.partnumberp else trace.partnumberp end) as nopart,
p.descriptionsmall,
trace.quantity
from
inventoryin as ins
left join inventoryinouttrace as trace on trace.inventoryinid = ins.inventoryinid
left join inventoryin_documents as docin on docin.inventoryinid = ins.inventoryinid
left join inventoryout_documents as docout on docout.inventoryoutid = trace.inventoryoutid
left join inventoryout as outs on outs.inventoryoutid = trace.inventoryoutid
left join inventoryindetails indetails on ins.inventoryinid = indetails.inventoryinid
left join product as p on trace.partnumberp=p.partnumberp
where
((ins.inventorydate > fechai+0 and ins.inventorydate < fechai+100)
or (outs.inventoryoutdate > fechai+0 and outs.inventoryoutdate < fechai+100));
END $$
DELIMITER ;
,當我在查詢瀏覽器擊中解釋按鈕,它會返回一個錯誤...
LOL從未想過要加入t3秒時間,這就足夠快了,謝謝 – Luiscencio 2009-10-20 17:42:51
COALESCE是ANSI標準 - 可以在SQL Server或Oracle上工作,而IFNULL必須要更改。 – 2009-10-20 17:49:10
如果OR的速度很慢,有沒有辦法做到WHERE更快? 其中condition1或condition3或...... – Luiscencio 2009-10-20 18:04:11