0

スタッフテーブルがあります

id  int(11) 
names   varchar(120)
family_names    varchar(100)
nickname    varchar(100)

と誰が働いているかの表

  id    int(11)
  personid int(11)
  titleid    int(11)
  typeid    int(11)
  at_work   datetime
  status int(11)

私の問題は、誰が働いているかを確認し、名前、家族名、役職を表示するレポートを作成する必要があることです。人はニックネームで呼ばれているので、まずニックネームが存在するかどうかを確認する必要があるので、このサイトでこの例を見つけます

SELECT IF(LENGTH(nickname)>0, nickname, names) FROM staff_list

ニックネームまたは名前のいずれかを取得しますが、mu who_is_at_workテーブルを検索してから、スタッフを職場に配置してそのリストを作成する必要があるため、要求は解決されません。

選択内で選択を実行して、必要な3つのフィールドを取得することは可能ですか?

ニックネーム/名前、家族名、タイトル

しばらくして、私はそれを行う方法を理解しました。

投稿してくれてありがとう、解決策を見つけました。これが私がやったことです。

SELECT p.id AS ID, 
   IF(LENGTH(p.nickname)>0, p.nickname, p.names) AS 'Names/Nickname',
   p.family_names AS 'Family name', 
   r.rank AS 'Rank'
   FROM atworklist AS who
   LEFT JOIN stafflist as p on p.id = who.personid   
   LEFT JOIN title AS r ON r.id = p.titleid
   where who.shipid= 2 and who.status in (2,3)
   ORDER BY r.sortorder

私にとっては魅力のように機能します

4

1 に答える 1

0

null 値を取り除きたい場合は、coalesce を使用できます。

select coalesce(nickname, names) from staff_list

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce

空の文字列をチェックしたい場合は、次の方法で実行できます。

 select case when nickname = '' then names else nickname end from staff_list
于 2012-07-27T15:04:29.807 に答える