在我的 SQL Server 中,我有这两个表:
a
id | name | code | lastpur | lastprc
和
b
num | code | onHand | isComm | avgPrc
我想做一个查询来打印所有这些字段(表上还有更多字段,但现在不需要访问它们。
两个表都通过字段code
连接。我的问题是,a
上只有 1 个条目,而 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,它只是读取“附近语法错误”),我无法调试。那么谁能告诉我哪里出了问题并帮助我解决这个问题?
最佳答案
试试这个:
$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."%' "
关于php - 返回多个结果的不同 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29014872/