【问题标题】:Test Case for Triple Join in SQLSQL中三重连接的测试用例
【发布时间】:2016-08-26 14:20:00
【问题描述】:
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
  );

这是测试我的联接是否有效工作的代码。但是,当我运行代码时,它说我在“,”附近有语法错误。谁能告诉我这是怎么回事?

P.S.:Equipment、EquipmentTypes 和 RentalInfo 是我在另一个文件中定义并“插入”到的表。

【问题讨论】:

  • 第一个猜测是跨越两行的字符串的解析错误。您没有提及数据库或您如何处理查询,所以这是可能的。
  • triple_join 是不是有两个参数的函数?您的 DBMS 是否支持使用单个 = 比较多个列?连接真的只返回一行吗?
  • 我遵循此链接中描述的格式:stackoverflow.com/questions/754527/best-way-to-test-sql-queries 我尝试使用同一行上的所有命令编写测试用例,所以我想这不是问题所在。是的,连接只返回一行:Enabler 420|1|20141107|1
  • @Shubham Goenka “我遵循了格式……”。你没有。你不能比较元组,只能比较值。
  • 您使用的是什么 DBMS?你可以添加一个标签来表明这一点吗?

标签: sql unit-testing


【解决方案1】:

不确定它是否能解决问题,但调试起来比你所拥有的要简单得多。也解决了多条匹配记录的问题:

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”和函数,看看是什么导致了问题。

【讨论】:

    猜你喜欢
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多