-2

テーブル

---------------------------------------------
| id | first_name | middle_name | last_name |
---------------------------------------------
| 1  | abc        |             | def       |
---------------------------------------------
| 2  |            |             | xyz       |
---------------------------------------------
| 3  |  xyz       |             |           |
---------------------------------------------          

値を含むフィールド名として出力を提供し、空の値またはnull値を持つフィールドを除外するSQLクエリが必要です。

お気に入り

id、first_name、last_name

4

1 に答える 1

4

最初に試してみてください。結果についてはフィドルを参照してください。

http://sqlfiddle.com/#!2/b6d7b/7

SELECT
  CONCAT_WS(',',
      IF(id          IS NULL, NULL, 'id'),
      IF(first_name  IS NULL, NULL, 'first_name'),
      IF(middle_name IS NULL, NULL, 'middle_name'),
      IF(last_name   IS NULL, NULL, 'last_name')
  )
FROM person

私の知る限り、動的に作成されたテーブル/フィールド名を使用する MySQL クエリを作成することはできません。クエリ オプティマイザーは、実際の実行前にクエリで使用されるテーブルとフィールドを正確に把握する必要があります。そのため、上記のクエリには手動で記述されたフィールド名が含まれています。

を使用してデータベース列に関するクエリを作成できますINFORMATION_SCHEMAが、受信した列名を使用してクエリを実行することはできません。ただし、php コードやストアド プロシージャなどを使用して必要な SQL コードを生成する場合を除きます。

http://dev.mysql.com/doc/refman/5.0/en/columns-table.htmlを参照してください。

名前に「joh」が含まれていて、フィールド名に実際に「joh」が含まれている人物を検索する場合は、同様のクエリを使用できます。

http://sqlfiddle.com/#!2/f2597/3

SELECT
  id AS person_id,
  CONCAT_WS(',',
      IF(first_name  LIKE '%joh%', 'first_name'  , NULL),
      IF(middle_name LIKE '%joh%', 'middle_name' , NULL),
      IF(last_name   LIKE '%joh%', 'last_name'   , NULL)
  ) AS name_parts
FROM person
WHERE first_name  LIKE '%joh%'
   OR middle_name LIKE '%joh%'
   OR last_name   LIKE '%joh%';

その列に少なくとも 1 つの NOT NULL 値があるすべての列名が必要な場合は、次のクエリを試してください。

http://sqlfiddle.com/#!2/8dec7/5

SELECT
  CONCAT_WS(',',
      IF(COUNT(id          )>0, 'id'         ,NULL),
      IF(COUNT(first_name  )>0, 'first_name' ,NULL),
      IF(COUNT(middle_name )>0, 'middle_name',NULL),
      IF(COUNT(last_name   )>0, 'last_name'  ,NULL)
  )
FROM person;

COUNT( expr ) を使用します ( http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html#function_count ) Returns a count of the number of non-NULL values of expr

于 2012-06-22T10:32:07.937 に答える