INSTR上JOIN的SQL问题()

时间:2013-07-27 14:39:38

标签: sql left-join conditional-statements

我已经阅读了很多JOIN语法的例子,但是没有一个能解决我的问题。

我有引号表和销售查询表。一个引用可能会导致多次查询,或者可能不会导致任何查询。我想创建所有报价的列表,并包括任何结果查询的详细信息。我期望引用多个结果行导致许多查询。对于那些没有引起任何查询的引用,我期待一行包含空或空查询字段。

连接数据位于引号表中,其中有一个名为“activity”的字段,其中包含所产生的任何或所有查询的ID。它会在每次调查时更新。

所以我尝试了这个:

SELECT q.*, e.id, e.price
FROM quotes as q
LEFT JOIN enquiries as e
ON INSTR(q.activity, e.id) >'0'
WHERE q.date > '2013-07-01'

但我的结果中的每一行都包含查询数据。我似乎无法将它包含在从未产生任何结果的引号中。我以为LEFT JOIN应该给我所有引号而不管查询,并包括匹配的查询数据。但是我看到的每个例子都只是加入a.id = b.id,所以我怀疑我的INSTR()匹配标准可能会搞砸了。

2 个答案:

答案 0 :(得分:0)

正如之前的评论员所说,这个问题将归功于与Instr的合作。许多RDBMS的INSTR返回值是一个整数值。因此,当您测试INSTR的值与'0'时,您将无法获得匹配。此外,如果Instr找不到匹配项,您可能会收到其他返回的内容,如MS Access,其中Null是可能的返回值。这显然是所有猜测,我们确实需要查看您的数据和问题的示例,以确认这是否是实际问题。在没有任何更多信息的情况下,这是您将获得的最佳信息:

在不知道您使用的是哪个数据库的情况下,我为INSTR提供了一些链接:

MySql

Oracle

MS Access (returns variant Long)

SQL Server - No Instr Function - CharIndex

答案 1 :(得分:0)

我认为您的问题可能在其他地方,因为这似乎对我来说很好。我假设查询列表只是一个逗号分隔的字符串。见http://sqlfiddle.com/#!4/71ce1/1

摆脱0周围的单引号,但这并没有任何区别。此外,您不应该依赖于默认日期格式,而是使用TO_DATE。您不会说出您正在使用的DBMS,但我尝试了Oracle和MySQL。