0

私はMysqlを使用していますが、単純な問題であることを願っています。1 つの条件が true または別の条件が true の場合、テーブルからデータを選択する必要があります。

私が試した1つの選択はデータを返しますが、必要以上に多くのデータを返します。実際、テーブルには 66 レコードしか含まれていませんが、私のクエリは 177 レコードを返しています。私は何かを誤解しています。

['city' が値に等しく、'type' がゴールデン] または 'type' が 'charms' というカテゴリ内にある場合、データを選択する必要があります

私はこのクエリを試しました

SELECT b.* 
FROM bubbles b, bubble_types bt 
WHERE 
  b.city = 10 
  AND b.type = 'golden' 
  OR bt.category = 'charm' 
  AND bt.type = b.type;

そしてこれ(これはまったく機能しませんが、マークに近いかもしれませんか?)

SELECT b.* 
IF(b.city = 10, b.type = 'golden'), 
IF(bt.category = 'charm', bt.type = b.type) 
FROM bubbles b, bubble_types bt;

うまくいけば、私が欲しいものは理にかなっていますか?

都市 10 の 66 個の「ゴールデン」バブル、またはタイプ フィールドでカテゴリ「チャーム」に分類されるバブルから約 10 行を取得する必要があります。

ありがとう;

bubble_types のサンプル テーブル データを編集します。

+----+----------+------------+ 
| id | category | type       | 
+----+----------+------------+ 
| 1  | bubble   | golden     | 
| 2  | charm    | teleport   | 
| 3  | charm    | blow       | 
| 4  | badge    | reuser     | 
| 5  | badge    | winner     | 
| 6  | badge    | loothunter | 
| 7  | charm    | freeze     | 
| 8  | badge    | reuser     | 
| 9  | badge    | winner     | 
| 10 | badge    | loothunter | 
+----+----------+------------+ 


mysql> describe bubbles;
+-------------+---------------------+------+-----+---------+----------------+
| Field       | Type                | Null | Key | Default | Extra          |
+-------------+---------------------+------+-----+---------+----------------+
| id          | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| city        | bigint(20)          | YES  |     | NULL    |                |
| type        | varchar(32)         | YES  |     | NULL    |                |
| taken_by    | bigint(20)          | YES  |     | NULL    |                |
| taken_time  | bigint(20)          | YES  |     | NULL    |                |
| label       | varchar(256)        | YES  |     | NULL    |                |
| description | varchar(16384)      | YES  |     | NULL    |                |
| created     | datetime            | YES  |     | NULL    |                |
+-------------+---------------------+------+-----+---------+----------------+
4

1 に答える 1

2

あなたはとても近いです!最初の "WHERE" 性を 2 番目の括弧で取ります (そして、適切な ON 句を JOIN に追加します)。

SELECT b.* 
FROM bubbles b
   JOIN bubble_types bt 
   ON b.type = bt.type
WHERE 
  (b.city = 10 AND b.type = 'golden')
  OR 
  (bt.category = 'charm' AND bt.type = b.type);

悪魔は、where 句の AND と OR の結合性の詳細にあります。疑問がある場合は、括弧を使用して意図を明確にします。

于 2012-08-05T20:09:30.153 に答える