2013-07-27 44 views
0

我读过很多JOIN语法的例子,但没有一个适用于我的问题。在INSTR上加入JOIN的SQL问题()

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

连接数据位于引号表中,其中有一个名为“活动”的字段,其中包含导致的任何或所有查询的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()匹配标准可能会让事情变得糟糕。

+0

您的查询看起来像它应该返回引号中的所有行。检查完整的返回结果集,这些可能会在最后。此外,您可以删除“0”周围的单引号。而且,你在用什么数据库? –

+0

如果您要在一列中存储多个外键值,这听起来就像是您,您真的应该考虑一些关于规范化数据模型的内容。多值属性是未来在关系模型中头痛的秘诀。 – jpw

+0

我同意在一列中有多个键是不理想的。我会说目前的头痛,而不是未来的头痛!但这就是我现在所坚持的。戈登,你是什么意思“..所有行退回引号”?我肯定没有得到行e。id不在q.activity字段中。我只获得INSTR条件为true的行。帮帮我!有人帮忙! – AJDncnsn

回答

0

正如之前的评论家所说,这个问题将归结为Instr的加入。许多RDBMS的INSTR的返回值是一个整数值。因此,当你测试'0'的INSTR值时,你不会得到一个匹配。此外,如果Instr未找到匹配项,则可能会返回其他类似MS Access的内容,其中Null是可能的返回值。这显然是所有的猜测,我们真的需要看到你的数据和问题的例子,以确认这是否是真正的问题。在没有任何更多的信息,这是最好的,你会得到:

不知道哪个DB使用的是我已经包括了INSTR几个环节:

MySql

Oracle

MS Access (returns variant Long)

SQL Server - No Instr Function - CharIndex

0

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

摆脱0附近的单引号,但这没有任何区别。另外,你不应该依赖默认的日期格式,而是使用TO_DATE。你没有说你正在使用什么DBMS,但我尝试了Oracle和MySQL。