首先感谢时间。
我在这里要求任何建议。
我有两个表inv和asig如下
wp_localize_script
我有一个查询工作,但我需要扩展它。
实际查询是
jsonarray
我从inv中获得的记录不是预期的
现在我需要的是获取来自inv的所有记录inv.mx< invID出现在asig中的次数。
我想到了这个问题:
inv has invID, name, ans, mx
asig has stuID, invID
并告诉我invID在asig表中的实际时间,所以我尝试在前一个中应用此查询(没有任何运气)
SELECT
inv.invID,
inv.name
FROM invest
WHERE (inv.invID NOT IN (SELECT DISTINCT asig.invID from asig))
当然我收到错误(操作数应包含1列)
我无法将一个数字与两个数字进行比较,但我在这里丢失了。我不知道如何进行这种比较。
赞赏任何提示
编辑>>>
我的asig表有1328条记录,我应该在查询中得到954条。我在excel中执行此操作以验证结果。
invID是一个uniuqe索引并且始终填充。 mx始终是> = 0
答案 0 :(得分:0)
此查询应该获取所有inv记录及其在asig表中没有记录的mx值,以及inv表中mx值小于记录数的所有记录asig表。
SELECT inv.invID, inv.mx
FROM inv LEFT OUTER JOIN asig
ON inv.invID = asig.invID
WHERE asig.invID is NULL
UNION
SELECT inv.invID, inv.mx
FROM inv INNER JOIN asig
ON inv.invID = asig.invID
WHERE asig.invID IS NULL
GROUP BY inv.invID
HAVING COUNT(asig.invID) < inv.mx
答案 1 :(得分:0)
对于每个invID,其在asig中的出现次数为
select count(*) from asig where indID=@invID
现在你比较它们
select * from inv where mv < (select count(*) from asig where asig.invID = inv.invID)
答案 2 :(得分:0)
您需要作为派生表加入查询 - 不要将其用作相关子查询。
select inv.*
from inv
inner join (
SELECT invID, COUNT( invID) as number
FROM asig
group by invID
) q
on inv.invid = q.invid
and inv.mx < q.number
答案 3 :(得分:0)
有几种查询模式将返回指定的结果。
假设invID
表中的inv
是唯一的,您可以使用简单的JOIN
操作,GROUP BY
计算invID
出现的次数asig
在mx
中,并将其与HAVING
子句中的 SELECT inv.invID
, inv.name
FROM inv
JOIN asig
ON asig.invID = inv.invID
GROUP
BY inv.invID
, inv.name
HAVING inv.mx < COUNT(asig.invID)
列进行比较
例如:
invID
注意:此查询取决于inv
表中invID
是唯一的保证,并且省略了NULL
为invID
的所有行}。
这是一个可能的查询模式的示例。
修改强>
此查询不会返回&#34;零计数&#34;对于asig
中不会出现mx
的{{1}}值,如果HAVING
可能为负,则会引起关注。
要解决这个问题,我们可以为 HAVING inv.mx < COUNT(asig.invID)
OR inv.mx < 0
子句
LEFT JOIN
并使加入成为&#34;外部&#34;通过指定JOIN
代替location.html.erb
来加入。