-2

データベースで連絡先を取得する必要がありますが、クエリは連絡先の名前にスペースが含まれていない場合にのみ返されます:「John」、「John Locke」がある場合、次のようなものは返されません。 :

これは私の選択です:

SELECT c.nome AS nomeContato, c.cpf, c.email, c.grupo, c.informacoes_complementares,
en.logradouro, en.bairro, en.numero, en.complemento, en.cep, en.municipio, en.uf,
e.nome AS nomeEmpresa, e. cnpj, t.numero AS telefone
FROM contato AS c
INNER JOIN endereco AS en ON c.id_contato = en.id_contato
INNER JOIN empresa AS e ON c.id_contato = e.id_contato
INNER JOIN telefone AS t ON c.id_contato = t.id_contato
WHERE c.nome LIKE "Homer";

この選択では、「ホーマー」レコードが返されますが、試してみると

SELECT c.nome AS nomeContato, c.cpf, c.email, c.grupo, c.informacoes_complementares,
    en.logradouro, en.bairro, en.numero, en.complemento, en.cep, en.municipio, en.uf,
    e.nome AS nomeEmpresa, e. cnpj, t.numero AS telefone
    FROM contato AS c
    INNER JOIN endereco AS en ON c.id_contato = en.id_contato
    INNER JOIN empresa AS e ON c.id_contato = e.id_contato
    INNER JOIN telefone AS t ON c.id_contato = t.id_contato
    WHERE c.nome LIKE "Bruce Waine";

返されませんが、両方の連絡先がデータベースにあります。

前もって感謝します。

EDITED私はばかげていました、私のデータベースはクラッシュしました、私はそれを削除して再構築しました、そして今、選択は機能していました! 皆さんありがとう

4

1 に答える 1

0

LIKE を使用して部分的なフィールドを照合しようとするときは、「%」ワイルドカード文字を使用する必要があります。あなたのインスタンスでは: -

WHERE c.nome LIKE "%John%";

これは、John、John Lock などのレコードと一致します。

「Bruce Waine」に一致しないのは、データ内のその特定のフィールドの先頭または末尾に追加の文字があるためだと思います。追加の空白、改行などの文字がある可能性があります。試す:-

WHERE c.nome LIKE "%Bruce Waine%";

インデックスはさまざまな程度の「LIKE」一致をサポートしていることに注意してください。

これで問題が解決しない場合は、クエリが期待どおりに動作していない可能性があります。

于 2012-07-15T23:03:07.690 に答える