3

私はこの答えを掘り下げました。contact と contact_copy という 2 つの同一のテーブルがあります。それぞれにフルネーム、会社名、番地、都市、州、郵便番号があります。contact.street が NULL でない場合は、それらの項目を選択します。そうであれば、重複したテーブルからそれらの項目を選択します。

SELECT contacts.fullname,
CASE WHEN contacts.street IS NULL
THEN
contacts_copy.Company,
contacts_copy.street,
contacts_copy.city,
contacts_copy.state,
contacts_copy.zip
ELSE
contacts.Company,
contacts.street,
contacts.city,
contacts.state,
contacts.zip
END CASE
FROM contacts_copy, contacts
WHERE contacts.Company = contacts_copy.fullname
AND contacts.kind = 'Person'
ORDER BY contacts.last DESC



I keep getting:
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '
contacts_copy.street,
contacts_copy.city,
contacts_copy.state,
contacts_cop' at line 4

これを行うには、もっと簡単な方法があるはずです。MySQL のエラー メッセージはまったく役に立ちません。

ありがとう、

ベン

4

3 に答える 3

3

これは、MySQL や、これまでに見た SQL では実行できないと思います。選択する列は具体的である必要がありますが、値は条件付きにすることができます。

できることはIF()、結果の各列に句を付けることです。

SELECT contacts.fullname,
  IF(contacts.street IS NULL, contacts_copy.Company, contacts.Company),
  ...

それは同じ効果があるはずです。

于 2012-08-28T23:12:00.367 に答える
1

編集:テーブルのエイリアスが変更され、余分なcompany.kind句が追加されました。

1 つのアプローチは、次を使用することUNIONです。

SELECT person.last,
       person.fullname,
       person.Company,
       person.street,
       person.city,
       person.state,
       person.zip
  FROM contacts person
  WHERE person.kind = 'Person'
    AND person.street IS NOT NULL
UNION
SELECT person.last,
       person.fullname,
       company.Company,
       company.street,
       company.city,
       company.state,
       company.zip
  FROM contacts person
  INNER JOIN contacts company ON person.Company = company.fullname
  WHERE company.kind = 'Company'
    AND person.kind = 'Person'
    AND person.street IS NULL
ORDER BY 1 DESC

残念ながら、これには結果に並べ替え列を含める必要があります。

目利きの方への注意: 元の試みとは異なり、このバージョンには、一致するエントリが存在しなくてもpersonstreetis notからの行が含まれます。NULLcompany

于 2012-08-28T23:27:58.470 に答える
0
SELECT c1.fullname AS fullname,  
c1.Company AS company,  
c1.first AS firstname,  
c1.last AS lastname,  
c2.street AS street,  
c2.city AS city,  
c2.state AS state,  
c2.zip AS zip   
FROM contacts AS c1, contacts AS c2 
WHERE c1.kind = 'Person'   
AND c1.Company = c2.fullname   
ORDER BY c1.last ASC;  

が答えでした。

于 2012-09-04T22:16:57.230 に答える