1

プロパティが 2 つ以下 (テーブル内の行が 2 つ以下)のアセットのasset_idcategory_nameおよび を選択したい。これまでのところ、私が持っているのはandだけです。がすべてのアセットに存在するとは限りません。もしそうなら、それはfrom a row withFixture IDasset_propertyasset_idcategory_nameFixture IDproperty_valueproperty_id 1

望ましい結果の例

asset_propertyテーブル:

| asset_id | property_id | property_value |
|:--------:|:-----------:|:---------------|
| 100      | 1           | A-6            |*
| 100      | 6           | Blue           |
| 104      | 1           | CC-7           |*
| 104      | 6           | Blue           |
| 104      | 4           | 12"            |
| 105      | 1           | B-1            |*
| 108      | 1           | HR-1           |*
| 109      | 3           | 500            |
| 109      | 4           | 1"             |

property_id1はFixture ID

望ましい結果:

| asset_id | category_name | property_value*|
|:--------:|:-------------:|:---------------|
| 100      | Flooring      | A-6            |
| 104      | Flooring      | CC-7           |
| 105      | Kitchen Equip | B-1            |
| 108      | Plumbing      | HR-1           |
| 109      | Plumbing      |                |

*property_valueFixture ID_ property_id_1

これまでのMYSQL

MySQL:

SELECT asset_property.asset_id, category_name
FROM asset_property
LEFT JOIN asset
ON asset.asset_id = asset_property.asset_id
LEFT JOIN category
ON category.category_id = asset.category_id
GROUP BY asset_property.asset_id
HAVING COUNT(asset_property.asset_id) <= 2

mysqlの説明

MySQL からの結果:

| asset_property.asset_id | category_name |
|:-----------------------:|:--------------|
| 3048                    | Parking Lot   |
| 3519                    | Kitchen       |
| 3522                    | Kitchen       |
| 3597                    | Flooring      |
(etc...)

SELECTそのため、property_value WHEREtheも必要property_id = 1です。これが理にかなっていることを願っています、ありがとう!

4

1 に答える 1

1

おそらく、このクエリには switch/case が適切でしょう

SELECT asset_property.asset_id, category_name,
( CASE property_id 
       WHEN 1 THEN property_value
       ELSE 0
  END
)
FROM asset_property
LEFT JOIN asset
     ON asset.asset_id = asset_property.asset_id
LEFT JOIN category
     ON category.category_id = asset.category_id
GROUP BY asset_property.asset_id
HAVING COUNT(asset_property.asset_id) <= 2

それが役立つことを願っています..

于 2012-05-01T13:33:58.867 に答える