1

我被困在 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会导致空响应,尽管有问题的记录的状态是2with2是一个CHAR字段。

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

谁能给我提示?

谢谢!

编辑
经过更多测试后,我认为b.status不是问题,因为如果我使用相关记录中的任何其他列和值,它也不会返回任何内容。

例如,记录将有列

 ==== 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;

嗯...如何粘贴记录...这是有问题的记录

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

2 回答 2

1

试试LIMIT 0,10吧。那应该行得通。

由于它是 CHAR 类型比较,您可能希望使用LIKE函数或STRCMP函数而不是= 运算符

于 2012-07-29T17:49:30.040 回答
1

我认为问题在于您的b.date字段值比较。如果字段
的数据类型是,那么您应该比较: b.datedate

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

否则,只需将值括在单引号中。

AND b.date >= '20120718'  

尝试更改它并查看结果。

于 2012-07-29T18:08:00.790 回答