0

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

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

连接数据位于报价表中,其中有一个名为“活动”的字段,其中包含所产生的任何或所有查询的 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() 匹配标准可能会搞砸。

4

2 回答 2

0

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

去掉 0 周围的单引号,但这没有任何区别。此外,您不应该依赖默认日期格式,而是使用TO_DATE. 您没有说您使用的是什么 DBMS,但我尝试了 Oracle 和 MySQL。

于 2014-04-13T19:47:11.177 回答
0

正如之前的评论员所暗示的那样,这个问题将归结为与 Instr 的加入。许多 RDBMS 的 INSTR 的返回值是一个整数值。因此,当您针对“0”测试 INSTR 的值时,您将不会得到匹配。此外,如果 Instr 没有找到匹配项,您可能会返回其他内容,例如 MS Access,其中 Null 是可能的返回值。这显然都是猜测,我们确实需要查看您的数据和问题的示例,以确认这是否是实际问题。在没有更多信息的情况下,这是您将获得的最好结果:

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

mysql ,

甲骨文

MS Access(返回变体 Long)

SQL Server - 没有 Instr 函数 - CharIndex

于 2014-04-13T17:33:11.887 回答