帮助我构建这个MySQL查询
这应该很容易,但不是:( 我有一个表,其中有一堆不同的功能ID 我需要的是建立一种表达方式: “让我看看所有有小狗、小猫、老鼠或鱼的宠物店”(至少一家) 这是最简单的部分 我被困的是 “带我看看所有有小狗的宠物店,也许还有小猫、老鼠或鱼” 有什么想法吗?:) 谢谢大家 编辑: 我在另一个网站上发布了这个问题,但没有得到答案,我将在这里发布。这是我原来的问题,请您也考虑一下: +------------------+----------+---------+ ΦColumn1ΦColumn2ΦActiveΦ +------------------+----------+---------+ 阿尔蓝色小工具阿尔法14阿尔法 阿尔红14阿尔 阿尔红x阿尔法15阿尔法 阿尔贝蓝14阿尔贝 阿尔贝蓝15阿尔贝 阿尔蓝X阿尔法15阿尔法 阿尔法14阿尔法 +------------------+----------+---------+ 这是我的戏剧。。。我需要询问: 其中(第2列=14和第2列=15)和活动='y' I列2=14和列2=15的所有记录都处于活动状态的结果集 我搞不懂这个 我可以这样做,它返回我14和15,其中至少有一个是y,但不是两者都是 我试过: 从表中选择*,其中(Column2=14和Column2=15)和active='y' 当然,这不会返回任何值,因为两者不能同时为14和15 所以我试着: 从表中选择*,其中((Column2=14或Column2=15)和active='y') 这会返回一个结果集,但不是我想要的 我只需要在第1列中返回以下结果: 第2列=14且活动='y' 第2列=15且活动='y' 这两个条件都必须成立 有什么帮助吗?谢谢大家 这很简单:帮助我构建这个MySQL查询,mysql,Mysql,这应该很容易,但不是:( 我有一个表,其中有一堆不同的功能ID 我需要的是建立一种表达方式: “让我看看所有有小狗、小猫、老鼠或鱼的宠物店”(至少一家) 这是最简单的部分 我被困的是 “带我看看所有有小狗的宠物店,也许还有小猫、老鼠或鱼” 有什么想法吗?:) 谢谢大家 编辑: 我在另一个网站上发布了这个问题,但没有得到答案,我将在这里发布。这是我原来的问题,请您也考虑一下: +------------------+----------+---------+ ΦColumn1ΦColumn2ΦAc
SELECT * FROM table
WHERE (Column2 = 14 AND active = 'y') OR (Column2 = 15 AND active = 'y')
你可以这样做:
select
pet_store_name
from pet_store
where
pet_type = 'puppies' or
(pet_type in ('kittens', 'mice', 'fish'))
col1 col2 active
red 14 y
red 15 y
*编辑:查看Michael的答案。假设您的表格定义为
id, pet_store_name, pet_type
select distinct
pet_store_name
from
pet_store
where
pet_type = 'puppies' AND
pet_store_name in (select pet_store_name from pet_store
where pet_type in('kittens', 'mice', 'fish')
很抱歉,您的问题仍然定义不清:您说要选择同时具有column2=14和column2=15的行。简单:不存在,第二列最多有一个值(可能为null) 既然这个问题是家庭作业,我就不给你答案了。首先,要问自己一个唯一性问题:是否可能有多行的column1='red'和column2='14'?如果没有,那么您只需要计算满足了多少需求“column2='some value'”,并只选择这些需求的完整数量 如果是这样,试试看
SELECT
Column1,
SUM(Column2 IN (14, 15)) AS NumberOfRequirementsMet
FROM table
WHERE Active = 'y'
GROUP BY Column1
HAVING NumberOfRequirementsMet = 2;
我也不愿意给出答案,但我会给你一些提示 假设您感兴趣的行如下所示:
select
pet_store_name
from pet_store
where
pet_type = 'puppies' or
(pet_type in ('kittens', 'mice', 'fish'))
col1 col2 active
red 14 y
red 15 y
然后您需要的颜色是某一行有14个y,而另一行有15个y。当然,两行的颜色必须相等 答案与这一原则有关: 任何SQL表达式一次只引用一行。 您可以使用联接将一行与另一行合并,结果是一个新行,该新行的列数是查询执行时的两倍,并且随着查询的执行而短暂存在(即,它不存储在任何位置)。因为它现在是一行,所以可以使用写SQL表达式来比较源表中独立行上存在的列 另一个对使用联接很重要的概念:表别名 这能让你继续下去吗
好的,是的,我不太愿意,因为这个问题被标记为家庭作业。但现在已经不是了 我的意思是:
SELECT DISTINCT col1
FROM mytable t1 JOIN mytable t2
ON (t1.col1 = t2.col1) -- i.e. they are both red
WHERE t1.col2 = 14 AND t1.active = 'y'
AND t2.col2 = 15 AND t2.active = 'y';
执行联接后,两个表中的列将位于同一行上(至少在正在形成的结果集中,而不是在存储器中)。因此,您可以编写一个引用基表两行中的列的表达式 参考您的表格,您可能正在查找以下内容:
从表t1内部联接表t2中选择DISTINCT t1.col1
关于t1.col1=t2.col1和t1.col2=‘小狗’和t2.col2 IN(‘老鼠’、‘鱼’、‘爬行动物’)
如果这是一个常见的查询,您可能会希望对表进行非规范化并重新组织数据。您能详细介绍一下表的结构吗?各种PET是否存储在一个单独的表中,并带有一个关联表,或者是否存在其他内容?如果您发布表结构,则有人会更容易向您提供一个示例查询:)请发布表定义;如果不知道数据库结构,很难帮助您“maybe”的行为似乎没有很好的定义。在DB表示中,商店要么会给宠物,要么不会给宠物。你说的“可能有小猫、老鼠或鱼的商店”是什么意思?安迪,我不需要真正的询问,只需要一个如何做的想法。。。奥蒂斯,我的意思是,他们不必拥有全部3只,只有一只动物…博克乌姆,看起来应该有用。。。如果是这种情况,它是否总是返回pet_type=“puppies”,然后返回其他3个?这是一个好问题,我不能告诉你,因为我不知道你的实际表结构是什么样子,涉及到其他表,等等。你能更新你的问题,以显示你正在使用的结构,或者数据本身的样本吗?小心,不要泄露答案。毕竟,这是一个家庭作业问题。试过这个后,它就不起作用了。如果我使用“或”,它只返回表中的所有记录。如果我使用“and”,它将不返回任何内容。不,这不是家庭作业问题,我只是让它更容易理解。我将尝试发布表结构,但我是这个网站的新手,不知道如何编辑我的问题。。。也许我会开始一个新的。。。。谢谢+1,这是正确的解决方案。应该为你工作,我不确定。它确实有效,但我认为SunMaid追求的是其他东西:第1列的值