不同的SQL查询返回多个结果

时间:2015-03-12 16:12:48

标签: php mysql sql-server

在我的SQL Server中,我有这两个表:

a
id  |  name  |   code   | lastpur  | lastprc  

b
num  |  code |  onHand  | isComm   |  avgPrc

我想做一个打印所有这些字段的查询(表上有更多字段,但现在不需要访问它们。

两个表都通过字段code连接。我的问题是a只有一个条目,而在b我有1个或几个。所以我尝试了这个查询:

 $query = "SELECT DISTINCT  a.id, 
                            a.name, 
                            a.lastpur, 
                            a.lastprc, 
                            b.onHand, 
                            b.iscomm, 
                            b.avgPrc, 
                            (b.onHand - b.isComm) AS available 
            FROM a, b
                WHERE a.ItemCode = b.ItemCode AND
                      a.id LIKE '%".php_variable1."%'
                      a.name LIKE '%".php_variable2."%'

问题是此查询返回表b中所有条目的数量。例如,如果有2代码123,它将返回2行,如果有4则返回4.我只需要1.如果找到匹配,则返回。

之后我听说过嵌套语句,所以我写道:

 SELECT DISTINCT    onHand, 
                    iscomm, 
                    avgPrc, 
                    (onHand - isComm) AS available
              FROM 
              (
                   SELECT id, 
                          name,
                          code,
                          lastpur,
                          lastprc
                       FROM a
                       WHERE id LIKE '"%.php_variable1.%"' AND
                             name LIKE '%".php_variable2."%'
              ) alias, b
          WHERE alias.code = b.code

但是我对嵌套并不是很熟悉,我得到了一些,不是非常有帮助的错误(我正在使用PDO,它只读''语法附近的错误')我无法调试。那么有谁能告诉我哪里出错了并帮助我解决这个问题?

1 个答案:

答案 0 :(得分:1)

试试这个:

$query = "SELECT a.*, b.*, (b.onHand - b.isComm) AS available 
          FROM a
          CROSS APPLY (
            SELECT TOP 1 b.*
            FROM b
            WHERE a.ItemCode = b.ItemCode
          ) b
          WHERE a.id LIKE '%".php_variable1."%'
            AND a.name LIKE '%".php_variable2."%' "