0

定義された属性を持つ人をプルできるクエリを作成しようとしています。

+----------------------------------------------------+
TABLE: Person
+----------------------------------------------------+
owner_id | name
1        | kevin
2        | lee

+----------------------------------------------------+
TABLE: Attributes
+----------------------------------------------------+
id              | owner_id       | attributes_id
1               | 1              | 52
2               | 1              | 53
3               | 1              | 23
4               | 2              | 52


SELECT Person.name FROM Person LEFT JOIN `Attributes` ON `Attributes`.`owner_id` = `Person`.`owner_id` WHERE Attributes.attributes_id = 52 AND Attributes.attributes_id = 53;

そのwhere句を使用してもowner_id1が返されませんでした。誰かが私を正しい方向に向けることができれば、私は最も素晴らしいでしょう!

4

3 に答える 3

3

データベースに、同時に2つの異なるものであるレコードを検索するように指示しています。単一のフィールドを同時に両方にすることはできません。しかし、それはお互いである可能性があるので...5253OR

... WHERE Attributes.attributes_id = 52 OR Attributes.attributes_id = 53
or more succinctly
... WHERE Attributes.attributes_id IN (52, 53)
于 2012-07-16T19:02:08.717 に答える
3

問題は

WHERE Attributes.attributes_id = 52 AND Attributes.attributes_id = 53

に変更します

WHERE Attributes.attributes_id in (52,53)
于 2012-07-16T19:02:47.763 に答える
1
SELECT Person.name 
FROM Person 
JOIN `Attributes` A1 ON A1.`owner_id` = `Person`.`owner_id` 
JOIN `Attributes` A2 ON A2.`owner_id` = `Person`.`owner_id` 
WHERE A1.attributes_id = 52 AND A2.attributes_id = 53; 

私はあなたがあなたがリストするすべての属性を持つ誰かが欲しいと思っています。とにかく効果的だったので、左の結合を内側の結合に変更しました。必要な属性ごとに、属性テーブルに個別に参加する必要があります。

別の方法は:

SELECT Person.name 
FROM Person 
JOIN `Attributes`  ON `Attributes`.`owner_id` = `Person`.`owner_id` 
WHERE `Attributes`.attributes_id = 52 OR `Attributes`.attributes_id = 53
GROUP BY Person.name 
Having count(*) = 2; 
于 2012-07-16T19:09:26.823 に答える