SQL中三重连接的测试用例

3
SELECT triple_join('A multiple join on the Equipment, EquipmentTypes, and
  RentalInfo works effectively: ',
    CASE WHEN
      (SELECT name, e.riid, rental_start, in_use FROM Equipment AS e JOIN 
        EquipmentTypes ON equipment_type = etid JOIN RentalInfo AS ri ON
        e.riid = ri.riid)
= ('Enabler 420', 1, '20141107', 1)
  THEN 'Passed' ELSE 'Failed' END
  );

这是测试我的连接是否有效的代码。但是,当我运行代码时,它显示附近有“,”的语法错误。有人能告诉我发生了什么吗?
附注:Equipment、EquipmentTypes和RentalInfo是我在另一个文件中定义并“插入”的表格。

第一个猜测是跨越两行的字符串解析错误。由于您没有提及数据库或者如何处理查询,所以这是一种可能性。 - Gordon Linoff
2
triple_join是一个带有两个参数的函数吗?你的DBMS是否支持使用单个=比较多列?这个连接是否真的只返回一行? - dnoeth
我按照这个链接中描述的格式进行了操作:https://dev59.com/CnRA5IYBdhLWcg3w_DLF。我尝试将测试用例中的所有命令都写在同一行,所以我想那不是问题。是的,连接只返回了一行:Enabler 420|1|20141107|1。 - Shubham Goenka
@Shubham Goenka “我遵循了格式...”,而你没有。你不能比较元组,只能比较值。 - Alex Kudryashev
1
你使用的是哪种数据库管理系统?你能添加一个标签来指示吗? - red6
1个回答

0

不确定它是否解决了问题,但比你之前的调试简单得多。此外,它将解决多个匹配记录的问题:

SELECT triple_join('A multiple join on the Equipment, EquipmentTypes, and
  RentalInfo works effectively: ',
    CASE WHEN EXISTS (
        SELECT TOP 1 1 FROM Equipment AS e 
        INNER JOIN EquipmentTypes as et ON e.equipment_type = et.etid 
        INNER JOIN RentalInfo AS ri ON e.riid = ri.riid
        WHERE name = 'Enabler 420' and e.riid = 1 and 
            rental_start = '20141107' and in_use = 1) 
    THEN 'Passed' ELSE 'Failed' END
);

如果问题仍然存在,请尝试分别运行内部的“SELECT”和函数,查看是什么导致了问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接