使用表达式从mysql表中选择

使用表达式从mysql表中选择,mysql,Mysql,我正在使用Mysql,我希望这是一个简单的问题。 如果一个条件为真或另一个条件为真,我需要从表中选择数据 我尝试过的一个select返回数据,但比它应该返回的数据多得多。实际上,该表只包含66条记录,但我的查询返回177条记录。我有点误会 如果['city'等于一个值且'type'为golden],或者'type'属于一个名为'charms'的类别,我需要选择数据 我试过这个问题 SELECT b.* FROM bubbles b, bubble_types bt WHERE b.ci

我正在使用Mysql,我希望这是一个简单的问题。 如果一个条件为真或另一个条件为真,我需要从表中选择数据

我尝试过的一个select返回数据,但比它应该返回的数据多得多。实际上,该表只包含66条记录,但我的查询返回177条记录。我有点误会

如果['city'等于一个值且'type'为golden],或者'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;
而这个(根本不起作用,但可能更接近目标?)

希望我想要的有意义

我应该从城市10的66个泡泡中得到大约10行,这些泡泡是“金色”的,或者那些类型字段将它们归入“魅力”类别的泡泡

谢谢,

编辑气泡类型的样本表数据:

+----+----------+------------+ 
| 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    |                |
+-------------+---------------------+------+-----+---------+----------------+

你太近了!在第一个go的“WHERE”-ness中加上第二个go的括号(并在JOIN中添加适当的ON子句):


魔鬼在于AND和OR子句的关联性细节。如果有疑问,请使用括号明确说明您的意图。

这也会在66行中返回177行。也许我还缺少一些更基本的东西。气泡|类型包含;+----------+-------------+---------------+|(1244)d)分类,分类,分类,分类,第1244)分类,分类,分类,分类,分类,分类,分类,分类,分类,分类,分类,分类,分类,分类,分类,分类,分类,分类,分类,分类,分类,分类,分类,分类,分类,分类,分类,分类,分类,分类,描述描述描述描述,分类,以及+---------------------------------------------------------------------------------------------------------4+++++++++++++++...44++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------++++++++++++++-----------------------------------| 10 |徽章|掠夺者|+-------------------------------------------+我现在怀疑是加入了。。。你能用表格定义编辑你的问题吗?我用我的思想要点编辑了我的问题。。。如果你总是得到太多的结果,那可能是因为你加入表格的方式使用了每个气泡的每个类别。我已经添加了气泡表格定义。这很奇怪,因为它返回10行;从气泡b中选择*,其中(b.city=2,b.type='golden');但这返回110行;从气泡b中选择b.*,气泡类型bt,其中(b.city=2,b.type='golden');对我来说似乎很奇怪。对,这是因为对于你正在进行的连接类型(交叉连接,iirc),你得到的是气泡*bubble_类型(每种气泡类型都有一个额外的气泡)。请同时显示
描述气泡类型
+----+----------+------------+ 
| 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    |                |
+-------------+---------------------+------+-----+---------+----------------+
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);