我陷入了MySQL查询,不知道我做错了什么(使用MySQL 5.0.88)。
这是我的查询:
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
为{{1} }}领域。
如果我注释掉该行,它会返回正确的记录,但是我想知道我做错了什么?
任何人都可以给我提示吗?
谢谢!
修改
经过一些测试之后,我认为 b.status 不是问题所在,因为如果我使用其他任何列和相关记录中的值,它也不会返回任何内容。
E.g。记录将有列
CHAR
所以投入:
==== no ===== written_by =====
1111 john smith
也会返回一个空的结果集。
EDIT2
这是一个示例数据集和查询。我遗漏了LEFT JOIN,因为它没有任何区别:
AND b.no = 1111 OR b.written_by = "john smith"
表:
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;
答案 0 :(得分:1)
请尝试使用LIMIT 0,10
。这应该有用。
由于这是CHAR类型比较,您可能需要使用LIKE函数或STRCMP函数而不是= operator。
答案 1 :(得分:1)
我认为问题在于您的b.date
字段值比较
如果b.date
字段的数据类型为date
,那么您应该比较:
AND b.date >= '2012-07-18'
否则只用单引号括起来。
AND b.date >= '20120718'
尝试更改它并查看结果。