1

私のアプリは、ユーザーが作成した txt ファイルを読み取り、クエリ テキスト、説明、入力と出力、クエリの種類などを含みます。 m より高度な in)。

HEIDI SQLのCSVインポートを介してExcelファイルからインポートしたspare_partsテーブルがあります。

それはこのように作られています:

+-------------+---------+---------+---------+----- --+---------+
| | 部品番号 | モデルX | モデルY | モデル Z | モデル 1 | モデル 2 |
+-------------+---------+---------+---------+----- --+---------+
| | パート A | 0 | 0 | 1 | 0 | 0 |
| | パート B | 1 | 0 | 0 | 1 | 0 |
| | パート C | 1 | 1 | 1 | 0 | 0 |
| | パート D | 0 | 0 | 0 | 1 | 1 |
+-------------+---------+---------+---------+----- --+---------+

特定のパーツが使用されているモデルをリストする必要があります。たとえば、パーツ C は、モデル X、Y、および Z を構築するために使用されます。

すべての列を手動でリストしたくありません。列が多く、頻繁に変更されるためです。

何を指示してるんですか?

4

2 に答える 2

0

スキーマを正規化します。

CREATE TABLE normalised_parts (
  PRIMARY KEY (model, part)
) SELECT 'X' AS model, `PART NUMBER` AS part FROM spare_parts WHERE `MODEL X`
UNION ALL
  SELECT 'Y', `PART NUMBER` FROM spare_parts WHERE `MODEL Y`
UNION ALL
  SELECT 'Z', `PART NUMBER` FROM spare_parts WHERE `MODEL Z`
UNION ALL
  SELECT '1', `PART NUMBER` FROM spare_parts WHERE `MODEL 1`
UNION ALL
  SELECT '2', `PART NUMBER` FROM spare_parts WHERE `MODEL 2`
-- etc.

次に、問題は次のようになります。

SELECT model FROM normalised_parts WHERE part = 'PART C'

モデル列が不明/多数の場合、情報スキーマから上記の DDL を作成し、準備して実行できます。

SELECT CONCAT('
  CREATE TABLE normalised_parts (
    PRIMARY KEY (model, part)
  ) ', GROUP_CONCAT('
    SELECT ', QUOTE(COLUMN_NAME), ' AS model, `PART NUMBER` AS part',
    ' FROM spare_parts WHERE `', REPLACE(COLUMN_NAME, '`', '``'), '`'
    SEPARATOR '
  UNION ALL'))
INTO  @sql
FROM  INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
  AND TABLE_NAME   = 'spare_parts'
  AND COLUMN_NAME LIKE 'MODEL %'  -- or whatever is appropriate

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

group_concat_max_len列名の合計の長さによっては、の値を増やす必要がある場合があることに注意してください。

于 2013-03-11T09:56:30.557 に答える
0

私が正しく理解していれば、各モデルに関連付けられているパーツの数はさまざまであるため、多対多の関係が必要です。このheidisqlについてはわかりませんが、テクニックは同じでなければなりません。

基本的に、あなたが持っているのは部品用の1つのテーブルです

部品:


ID | 名前


モデルのための別の


ID | 名前


最後に、前の 2 つのテーブルを接続する 3 番目のテーブル

models_to_parts


ID | モデル ID | part_id


これらのテーブル間の関係は次のとおりです。

ここに画像の説明を入力

また、モデルに関連付けられているパーツを取得する SQL は次のようになります。

SELECT models.name, parts.name FROM models

INNER JOIN models_to_parts ON models.id = models_to_parts.model_id
INNER JOIN parts ON models_to_parts.part_id = parts.id

WHERE models.name = "C" -- or whatever condition you want on model or part 

この多対多のテーブルを作成するには、モデルを挿入してからパーツを挿入し、両方の ID を読み取ってそれらを接続する行を挿入する必要があります。

詳細については、こちらをご覧ください: http://www.tomjewett.com/dbdesign/dbdesign.php?page=manymany.php

于 2013-03-11T09:54:20.483 に答える