小编rub*_*ube的帖子

除了MySQL和PostgreSQL共有的MONTH()和YEAR()函数的任何替代方法

编写可以在MySQL和PostgreSQL中运行的查询(一个sql文件),到目前为止一切正常,除了以下内容:

SELECT MONTH(Date), YEAR(Date) FROM Ticket;
Run Code Online (Sandbox Code Playgroud)

用于从Ticket表中的Date列中提取月份编号(9,10,11 ..)和年份(2011年,2012 ..)(是的,我无法更改此列的名称).它在MySQL中工作正常,但是当我在PostgreSQL中运行查询时,它会为MONTH()和YEAR()提供以下错误消息.

ERROR:  function month(date) does not exist
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud)

经过一段时间的研究后,我发现了其他一些可以在Postgres中完成工作的函数,但我担心这些函数可能无法在MySQL中运行.非常期待任何可能的解决方案.

mysql sql database postgresql

5
推荐指数
1
解决办法
4759
查看次数

关系代数 - 精确查找两个值

下面是一个表和简单的 SQL,用于查找恰好出现在两个州的城市

Name     State
----     -----
Paris    MO
Paris    TX
Paris    VA
Austin   MA
Austin   TX
Burling  VT
Run Code Online (Sandbox Code Playgroud)

结果:只有奥斯汀才有资格,因为它恰好发生在两个州

SQL

SELECT c1.Name FROM City AS c1
JOIN City AS c2 ON c1.Name = c2.Name AND c1.State <> c2.State
WHERE NOT EXISTS (
    SELECT 1 FROM City AS c3
    WHERE c1.Name = c3.Name AND c3.State NOT IN (c1.State, c2.State);
Run Code Online (Sandbox Code Playgroud)

我想用关系代数来表达上面的sql。我做了第一部分,它找到了至少在两个州中出现的城市,但无法弄清楚如何表达 NOT EXISTS (...) 部分。我的理解是,我需要在后面的部分中进行一些关系划分。

关系代数(第一部分)

P = 用于重命名的 rho 符号,J = 加入

X1 --> Pc1(City)
X2 --> Pc2(City)
X3 --> X1 …
Run Code Online (Sandbox Code Playgroud)

sql database relational relational-algebra relational-division

3
推荐指数
1
解决办法
5472
查看次数

MySQL选择This和That

表格如下:

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
Run Code Online (Sandbox Code Playgroud)

找到销售BOTH Hammer和Thermometer的商店的名称.结果表是

ShopName   
-------------- 
Aladdin
Clerk's Store
Run Code Online (Sandbox Code Playgroud)

我认为以下查询将起作用,但它返回空集

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;
Run Code Online (Sandbox Code Playgroud)

也尝试用OR而不是AND,但没有工作(返回所有的商店).什么是可能的解决方案?

为了使它有点清楚,我想选择同时具有两种物品(锤子和热水瓶)的商店,即使商店B销售锤子和D销售温度计,它们也不包括在内.只有出售这两件物品的A和C应该在结果上

mysql sql database

2
推荐指数
1
解决办法
1051
查看次数

MySql - 在不使用任何聚合函数的情况下查找至少发生两次的值

表:城市

City_Name (PK)    State_Name (PK)    Population
--------------    ---------------    ----------
Austin            MA
Austin            TX
Burlington        VT
Fresno            CA
Houston           TX
Independence      KS
Independence      MO
Independence      PA 
Kansas            CA 
Kansas            MO
Paris             MO 
Paris             OR 
Paris             TX 
Paris             VA  
Paso              TX
Run Code Online (Sandbox Code Playgroud)

上表有一个复合主键(City_Name和State_Name).我想找到至少在两个不同国家发生的城市.在这种情况下,结果将是

City_Name
---------
Austin
Independence
Kansas
Paris
Run Code Online (Sandbox Code Playgroud)

其他城市不符合条件,因为它们不会出现在至少两个州.

该解决方案是练习关系演算问题所必需的,因此(不幸的是)不能使用诸如COUNT()之类的聚合函数.我浏览了一本数据库书,在那里我看到了类似问题的解决方案,看起来像这样,但没有用.

SELECT c1.State_Name FROM City AS c1
JOIN City AS c2 on c1.City_Name = c2.City_Name AND c1.State_Name = c2.State_Name
JOIN City AS c3 on c1.City_Name = c3.City_Name AND c1.State_Name = …
Run Code Online (Sandbox Code Playgroud)

mysql sql database

2
推荐指数
2
解决办法
1256
查看次数