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

クエリは 1 つのレコードを返す必要がありますが、問題のレコードのステータスがフィールドでb.statusあるにもかかわらず、のチェックにより空の応答が返されます。22CHAR

行をコメントアウトすると、正しいレコードが返されますが、何が間違っているのか知りたいですか?

誰でも私にヒントを与えることができますか?

ありがとう!

編集さらにテストした後、問題のレコードの他の列と値を使用しても何も返されないため、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

b.date問題はフィールド値の比較にあると思います。フィールド
のデータ型がの場合、次のように比較する必要があります。 b.datedate

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

それ以外の場合は、値を一重引用符で囲みます。

AND b.date >= '20120718'  

変更してみて、結果を確認してください。

于 2012-07-29T18:08:00.790 に答える
1

LIMIT 0,10代わりに試してください。それはうまくいくはずです。

CHAR 型の比較なので、 = 演算子の代わりにLIKE関数やSTRCMP関数を使用したい場合があります。

于 2012-07-29T17:49:30.040 に答える