2012-07-29 58 views
1

我被困在MySQL查询中,不知道我在做什么错误(使用MySQL 5.0.88)。为什么我的mysql选择返回一个空的结果集?

这里是我的查询:

SELECT b.some, b.thing, bt.else AS liefdatum_gewuenscht, bt.bar 
    FROM btable AS b 
     LEFT JOIN bschedule AS bt 
      ON bt.key= b.key 
      AND bt.type = b.type 
     WHERE 
      b.entry_from IN (1,2,3,4) 
     AND b.`status` = "2" 
     AND b.date >= 20120718 
     LIMIT 1,10 

查询应返回单个记录,但对于b.status检查导致空响应,虽然有问题的记录有2状态与2是一个CHAR场。

如果我注释掉它返回正确的记录行,但是我想知道我做错了吗?

任何人都可以给我提示吗?

谢谢!

编辑
一些更多的测试后,我认为这b.status是没有问题的,因为如果我有问题使用任何其他列和值从记录也返回任何结果。

E.g.该记录将有列

==== no ===== written_by ===== 
    1111   john smith 

所以投入:

AND b.no = 1111 OR b.written_by = "john smith" 

也返回一个空结果。

EDIT2
下面是一个示例数据集和查询。我离开了LEFT JOIN,因为它没有任何区别:

SELECT b.* 
FROM bk AS b 
WHERE 1 
AND b.entry_from IN (9900000002985) 
AND b.`status` = "2 " 
AND b.bestelldatum >= 20120718 
LIMIT 1,10 

表:

CREATE TABLE `bk` (
`id` INT(11) NOT NULL AUTO_INCREMENT, 
`entry_from` VARCHAR(13) NULL DEFAULT NULL, 
`placed_at` VARCHAR(13) NULL DEFAULT NULL, 
`type` VARCHAR(2) NULL DEFAULT 'SF', 
`no` VARCHAR(35) NULL DEFAULT NULL, 
`date` DATE NULL DEFAULT NULL, 
`written_by` VARCHAR(35) NULL DEFAULT 'Händler', 
`status` VARCHAR(3) NULL DEFAULT NULL, 
PRIMARY KEY (`id`) 
) 
COLLATE='latin1_swedish_ci' 
ENGINE=InnoDB; 

HM ...如何粘贴记录......这是问题

记录
id = 985 
entry_from = 9900000002985 
placed_at = 9900000003005 
type = SF 
no = 11 
date = 2012-07-19 
written_by "Fachhändler" 
status = 2 
+0

MySQL的哪个版本? – nawfal 2012-07-29 18:01:40

+0

我忘了... 5.0。88 – frequent 2012-07-29 18:02:33

+0

可以给我们一组样本的数据和模式,以便我们可以在不同版本的mysql中进行测试吗? – nawfal 2012-07-29 18:04:11

回答

1

尝试用LIMIT 0,10代替。这应该工作。

由于这是CHAR类型比较,所以您可能需要使用LIKE函数或STRCMP函数而不是= operator

+0

那不是真实的,我可以使用普通等于操作在MySQL .. – nawfal 2012-07-29 17:55:50

+0

好主意,做简单的字符比较。尝试 – frequent 2012-07-29 17:56:01

+0

不行。不起作用。此外,它似乎与查询状态无关,因为如果我尝试查询表中的任何其他字段,它也不会返回任何内容。查看我的编辑 – frequent 2012-07-29 17:58:19

1

我觉得问题在于你的b.date字段值的比较。
如果b.date字段的数据类型是date那么你应该比较喜欢:

AND b.date >= '2012-07-18' 

否则只是围绕在单引号的价值。

AND b.date >= '20120718' 

尝试更改并查看结果。

+0

好主意,但日期选择正确(认为这是日期,也在开始) – frequent 2012-07-29 18:22:18

+0

你也有一个观点。最初的查询是在Coldfusion中,没有参数化查询。输入的日期被重新格式化是这样的:#right(日期,4)##月中旬(日期,4,2)##左(日期,2)#,我想我不得不宣布作为查询参数=日期(这毕竟是一个日期)。但是,我需要将其声明为VARCHAR字段。然后查询工作...所以,感谢指针 – frequent 2012-07-29 18:34:19

相关问题