当前位置: 首页 > 面试题库 >

MySQL同时选择This和That

冯鸿哲
2023-03-14
问题内容

这些表如下所示:

Table: Shops

ShopCode   ShopName
--------   --------
A          Aladdin
B          Backstreet
C          Clerk's Store
D          Debs Tool

Table: Sale

ShopCode   Product
--------   -------
A          Hammer
A          Thermometer
A          Compass
B          Eraser
B          Hammer
C          Thermometer
C          Hammer
D          Thermometer

查找同时出售锤子和温度计的商店的名称。结果表将是

ShopName   
-------------- 
Aladdin
Clerk's Store

我以为下面的查询可以用,但是返回的空集

mysql> SELECT Shops.ShopName FROM Shops
    -> JOIN Sale ON Shops.ShopCode=Sale.ShopCode
    -> WHERE Sale.Product='Hammer' AND Sale.Product='Thermometer'
    -> GROUP BY Shops.ShopCode;

也尝试用OR代替AND,但不起作用(退还所有商店)。有什么可能的解决方案?

为了更清楚一点,我想选择同时包含商品(锤子和热电偶)的商店,即使商店B出售锤子而商店D出售温度计,也将不包括在内。只有同时出售这两种商品的A和C才会出现在结果上


问题答案:

有两个相当简单的选择。

您可以在销售表中加入两次,每个项目一次。如果您跳过DISTINCT,则如果商店出售多个锤子或温度计,则可能会得到重复的值。

SELECT DISTINCT s.shopname
FROM shops s
JOIN sale s1 ON s.shopcode = s1.shopcode AND s1.product='hammer'
JOIN sale s2 ON s.shopcode = s2.shopcode AND s2.product='thermometer';

…或者您可以用锤子或温度计找到所有匹配项,并计算有多少个不同的值。如果有两个可能的值,而您同时获得了两个,则表示已设置。

SELECT s.shopname
FROM shops s
JOIN sale s1 ON s.shopcode = s1.shopcode
WHERE s1.product IN('hammer','thermometer')
GROUP BY s.shopname
HAVING COUNT(DISTINCT s1.product)=2;

一个SQLfiddle来测试两者。



 类似资料:
  • 问题内容: 我正在尝试选择mysql表中的重复行,它对我来说很好,但问题是它不是让我选择该查询中的所有字段,而是让我选择用作不同的字段名,让我写查询更好的了解 第一个工作正常 现在,当我尝试选择所有字段时,我最终会出现错误 我正在尝试选择最新的重复项,比如说ticket_id 127是行ID 7、8、9的3倍,因此我想选择一次,最新条目在这种情况下为9,这适用于所有其余项ticket_id的 任何

  • 问题内容: 我有获取ajax请求的事件链接,我想获取链接的选择器并获取属性。我正在为AJAX回调设置ajax。 但是我得到这个错误 我有获取ajax请求的事件链接,我想获取链接的选择器并获取属性。我正在为AJAX回调设置ajax。 但是我得到这个错误 的HTML 问题答案: 如果要在回调内部引用该元素(即处理程序绑定到的元素),请使用 代替 选择元素的父元素,即元素似乎没有属性。 从 文档中 :

  • 问题内容: 有没有办法插入预设值和我从选择查询中获得的值?例如: 我有“字符串”的值和数字5,但是我必须从这样的选择中找到[int]值: 那给我那个ID放在table1里面。 如何将其合并为一个语句? 问题答案: 使用查询,并将已知值放入:

  • 问题内容: 我知道这个问题已经被问过很多次了,但是我已经尝试了好几个小时,却没有任何效果,我是php和ajax的新手,所以,我可能会遗漏一个我不知道的小东西,我想要在这里实现的目的是,我希望用户选择一个食物组,然后基于该组显示配料表。 我单独测试了process.php文件,它运行良好,还测试了脚本,发生了什么事,当我注释掉并键入alert(parent)时,从$ .ajax开头的行不起作用了,我

  • 问题内容: 我想知道如何从MySQL表中选择一个值。该表包括列和其他列(是自动递增的,并且是唯一的)。给定用户名,我想将一个会话变量设置为等于给定用户名的列中的值。这是我已经尝试过的代码: 到目前为止,我得到: 可捕获的致命错误:无法将类stdClass的对象转换为字符串。 强制转换为字符串类型不能解决问题。 问题答案: 不要在查询中的字段名称或表名称中使用引号。 提取对象后,您需要通过属性/属性

  • 以下代码起作用: 如何将第二行重构为: 您对所选的******选项使用了什么?