2010-11-26 5 views
1

Qe: 1)Mysql Abfrage die Zeit nehmen

select 
    a.finishproductid 
from 
    tblt_invoiceorderitems a, tblm_invoiceorder b 
where 
    b.invoiceorderdate <= 'Current Date' and 
    a.invoiceorderid = b.invoiceorderid 

--- es hat mehr als 16K Datensätze.

Qe: 2)

select jobcardid, stockcode 
from tblm_finishproduct 
where productionentrydate <= 'Current Date' 

--- es hat auch mehr als 16k Rekord.

Jetzt möchte ich von 2. Abfrage nicht in der ersten Abfrage.

select jobcardid, stockcode 
from 
    tblm_finishproduct 
where 
    productionentrydate <= 'CurrrntDate' and 
    finishproductid not in 
    (
    select 
     a.finishproductid 
    from 
     tblt_invoiceorderitems a, tblm_invoiceorder b 
    where 
     b.invoiceorderdate <= 'CurrrntDate' and 
     a.invoiceorderid = b.invoiceorderid 
); 

nun eine Zeit

+0

Verwenden Sie bitte Codeblöcke für SQL. – robert

Antwort

0

Dies gilt nicht Ihre Frage beantworten, aber Sie sollten nicht a.invoiceorderid = b.invoiceorderid verwenden in Ihrem wo clause-- Versuchen Sie diese Abfrage anstelle der ersten Abfrage. Natural join ist effizienter als das Erstellen eines Kreuzprodukts der gesamten Tabelle und die Auswahl nur der übereinstimmenden Zeilen.

select a.finishproductid 
from tblt_invoiceorderitems a 
natural join tblm_invoiceorder b 
where b.invoiceorderdate <= 'Current Date' 
0

seine dies von der Einnahme entfernen nicht in:

b.invoiceorderdate <= 'CurrrntDate' and 
0

Das Ergebnis von "select Table1, Table2, Table3" ist 16k^3 oder 16k^2. Sie müssen einen "inneren Beitritt" oder "Beitritt" mit dem Primärschlüssel machen, um die Suche zu erleichtern.

Siehe u.