2010-12-22 52 views
0

我正在使用mysql/php/apache。我有以下情況:如何從一個表中選擇2個字段並將其與另一個表的1個字段進行比較

2表中,我需要比較一些信息,如果我使用INNER JOIN,但沒有問題,但我的列中有問題。

表1 - > invoices_account
表2 - > invoices_payable

invoices_account我有這個字段:id, categ, categ_name, code, name, active, essential

invoices_payable我:id, ..(all my fields).. , reference

invoices_payable中的字段引用的值與categ的值相同並在另一個表invoices_account中編碼。它僅在一個字段中連接。

現在我只需要報告重要的帳戶,我不知道如何從一個表中選擇2個字段並在另一個表的1個字段上進行比較。

我希望在我的解釋中清楚..但它是一種沒有計劃在該項目上的情況。現在我無法修改數據庫的結構,因爲我內部有大量數據。

有人知道如何解決這個熱點麻煩嗎? 非常感謝任何人。

我的舊的查詢是這樣的事情,但不工作的原因領域CATEG代碼必須級聯referencia進行比較。

SELECT SUM(ip.total) as total, ip.due_date, ip.status, ip.referencia 
FROM invoices_payable ip 
INNER JOIN invoices_account ON ip.referencia = invoices_account.code 
WHERE due_date BETWEEN '$dinov' and '$dfnov' 
AND invoices_payable.referencia = invoices_account.code 
AND invoices_payable.status ='paid' 
AND invoices_account.essential = 1 
  • 其中$ dinov,$ dfnov是我的約會。

回答

1
SELECT categ_name, ... FROM invoices_account 
JOIN invoices_payable 
ON CONCAT(invoices_account.categ, invoices_account.code) = invoices_payable.reference 
+0

@MK多數民衆贊成在正確的! – B4NZ41 2010-12-22 18:58:21

2

您可以在您的連接的ON子句中使用CONCAT()函數。

這可能是非常緩慢的,因爲它不能對invoices_account_table使用索引,但funcitonally你應該能夠使用這樣的查詢:

select ... 
from invoices_account 
inner join invoices_payable 
    on invoices_payable.reference = concat(invoices_payable.categ,invoices_payable.code); 
+0

嗨@lkeWalker它適合像手套。完美的工作,功能concat工作。太棒了,問題解決了。 非常感謝。我正在嘗試與group_concat,我得到錯誤。 – B4NZ41 2010-12-22 18:52:44

0

另一個問題解答。謝謝。

到底我查詢這個樣子的

$sql = "SELECT SUM(invoices_payable.total) as total, invoices_payable.due_date, invoices_payable.status, invoices_payable.referencia, invoices_payable.status, invoices_account.essential \n" 
    . "FROM invoices_account \n" 
    . "INNER JOIN invoices_payable \n" 
    . "ON invoices_payable.referencia = concat(invoices_account.categ,invoices_account.code) \n" 
    . "WHERE due_date BETWEEN \'2010-11-01\' and \'2010-12-01\' \n" 
    . "AND invoices_payable.status =\'paid\' \n" 
    . "AND invoices_account.essential = 1"; 
相關問題