如何从一个表中选择2个字段并将其与另一个表的1个字段进行比较

时间:2010-12-22 18:41:38

标签: mysql compare concatenation

我正在使用 mysql / php / apache 。我有以下情况:

我需要比较一些信息的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中我的字段引用的值与其他表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
  • WHERE $ dinov,$ dfnov是我的约会。

3 个答案:

答案 0 :(得分:2)

您可以在join的ON子句中使用CONCAT()函数。

它可能非常慢,因为它无法在invoices_account_table上使用索引,但是功能上你应该能够使用这样的查询:

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

答案 1 :(得分:1)

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

答案 2 :(得分: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";