在我的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,它只读''语法附近的错误')我无法调试。那么有谁能告诉我哪里出错了并帮助我解决这个问题?
答案 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."%' "