【问题标题】:Transforming simple sql to "access sql"将简单的 sql 转换为“访问 sql”
【发布时间】:2016-05-07 16:18:26
【问题描述】:

我需要一些帮助来将 sql 代码转换为 sql 访问代码,我的代码是:

SELECT `HOTEL`.`NAME_H`,`ROOM`.`NUMBER_R`,`ROOM`.`FLOOR_R`
FROM HOTEL, ROOM
WHERE `HOTEL`.`CODE_H`=`ROOM`.`CODE_H`
AND `HOTEL`.`TOWN_H`=`Athens`
AND (`HOTEL`.`CODE_H`,`ROOM`.`NUMBER_R`)
NOT IN (SELECT `CODE_H`,`NUMBER_R` FROM RESERVATION)

它没有在access中运行,我不知道如何在ms中使用not in,有什么想法吗?我有一个问题,另一个问题,我的代码是:

SELECT `ΟFFER`.`CODE_O`,`HOTEL`.`NAME_H`,`ROOMTYPE`.`NAME_RT`,MIN(`OFFER`.`PRICE_O`)
FROM OFFER,HOTEL,ROOMTYPE
WHERE `OFFER`.`CODE_H`=`HOTEL`.`CODE_H`
AND `OFFER`.`CODE_RT`=`ROOMTYPE`.`CODE_RT`
GROUP BY `CODE_O`

【问题讨论】:

  • 您如何提供您收到的完整错误消息?并添加Access SQL中哪个位置标记为错误。
  • NOT IN 在 Access SQL 中有效,但您必须将其对齐到一列而不是多列。至于第二个查询,对于 group by 查询,所有非聚合列必须在 GROUP BY 子句中引用。遗憾的是,MySQL 允许这样的查询,但大多数 RDMS 都失败了,具体取决于 only_full_group_by 设置。
  • 您最初使用的是哪个 RDBMS?请添加标签以指定您使用的是mysqlpostgresqlsql-serveroracle 还是db2 - 或其他完全不同的东西。

标签: sql ms-access ms-access-2007


【解决方案1】:

这应该可行:

SELECT h.NAME_H, r.NUMBER_R, r.FLOOR_R
FROM HOTEL as h INNER JOIN
     ROOM as r
     ON h.code_h = r.code_h
WHERE h.TOWN_H = "Athens" AND
      NOT EXISTS (SELECT 1
                  FROM RESERVATION as r
                  WHERE h.CODE_H = r.CODE_H AND
                        h.NUMBER_R = r.NUMBER_R
                 );

事实上,这应该适用于大多数数据库。

【讨论】:

  • 它在 ms access 2007 中不起作用,它要求我提供一个参数。
  • 对第二个有什么想法吗?
  • @Nick.P. . . .反引号是一个疏忽。单引号是另一个问题。 . . MS Access 对字符串使用双引号。
猜你喜欢
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-03
  • 1970-01-01
相关资源
最近更新 更多