Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
帮助我构建这个MySQL查询_Mysql - Fatal编程技术网

帮助我构建这个MySQL查询

帮助我构建这个MySQL查询,mysql,Mysql,这应该很容易,但不是:( 我有一个表,其中有一堆不同的功能ID 我需要的是建立一种表达方式: “让我看看所有有小狗、小猫、老鼠或鱼的宠物店”(至少一家) 这是最简单的部分 我被困的是 “带我看看所有有小狗的宠物店,也许还有小猫、老鼠或鱼” 有什么想法吗?:) 谢谢大家 编辑: 我在另一个网站上发布了这个问题,但没有得到答案,我将在这里发布。这是我原来的问题,请您也考虑一下: +------------------+----------+---------+ ΦColumn1ΦColumn2ΦAc

这应该很容易,但不是:(

我有一个表,其中有一堆不同的功能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'

这两个条件都必须成立

有什么帮助吗?谢谢大家

这很简单:

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列的值