1

mySQL の IF 句内で LIKE を使用しようとすると、エラーが発生します。

SELECT nc.web_name AS company_name,
    IF((b.booth_number LIKE '%Cafe%', b.booth_number, substring(b.booth_number,4)) AS booth_number, 
    nc.site_url AS website, IF (nc.ismi_status = 1, 'Member','') AS member_status 
    FROM booth_sale bs JOIN {ismi.booth} b ON bs.booth_id = b.booth_id 
    JOIN ismi.new_people np ON bs.contact_id = np.id 
    JOIN ismi.new_company nc ON nc.id = np.company_id 
    WHERE b.show_event_id = 298 AND status IN(44,45) ORDER BY 3

これを行うと、クエリは正常に機能します。

IF((b.booth_number = 'Cafe', b.booth_number, substring(b.booth_number,4)) AS booth_number

ただし、複数の可能性を確認する必要があります。Cafe、Cafe1、Cafe2 などがある可能性がありb.booth_number、そのフィールド値に Cafe が含まれるすべてのレコードを返したいと考えています。

これは私が得るエラーです:

PDOException: SQLSTATE[42000]: 構文エラーまたはアクセス違反: 1064 SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルで、2 行目の 'AS ブース番号, nc.site_url AS website, IF (nc.ismi_status = 1, 'Member','') ' の近くで使用する正しい構文を確認してください: SELECT nc. web_name AS company_name, IF((b.booth_number LIKE '%Cafe%', b.booth_number, substring(b.booth_number,4)) AS ブース番号, nc.site_url AS ウェブサイト, IF (nc.ismi_status = 1, 'メンバー' ,'') AS member_status FROM {ismi.booth_sale} bs JOIN {ismi.booth} b ON bs.booth_id = b.booth_id JOIN {ismi.new_people} np ON bs.contact_id = np.id JOIN {ismi.new_company} nc ON nc.id = np.company_id WHERE b.show_event_id = 298 AND ステータス IN(44,45) ORDER BY 3

誰が私が間違っているのか、またはこれを行う別の方法があるかどうかを教えてもらえますか?

4

1 に答える 1

4

ステートメントIFには、開き括弧が多すぎます。最初のものを削除すると、問題がないはずです(もちろん、他のSQLエラーは保留中です)。

...
IF(b.booth_number LIKE '%Cafe%', b.booth_number, substring(b.booth_number,4)) AS booth_number, 
...
于 2012-09-27T20:17:04.720 に答える