Apex Oracle 中的 SQL 多对多查询

Posted

技术标签:

【中文标题】Apex Oracle 中的 SQL 多对多查询【英文标题】:SQL Many-to-Many Query in Apex Oracle 【发布时间】:2021-03-11 21:57:38 【问题描述】:

我通过创建中间表PRODUCT_TYPE-LABELS 在表PRODUCT_TYPELABEL 之间创建了多对多关系。我想检索所有标有“无麸质”和“无乳糖”标签的产品,并找到了类似主题的帮助 (How to filter SQL results in a has-many-through relation),但始终无法正常工作。

表格如下:

PRODUCT_TYPE

  PRODUCT_TYPE ->Primary Key
  CONTAINER
    VOLUME_L
     PRICE_EUROS
    ...


LABEL

  LABEL_NAME ->Primary Key
  REQUIREMENTS
 

PRODUCT_TYPE-LABELS

  PRODUCT_TYPE
  LABEL_NAME

事实上,即使在创建最简单的命令时

SELECT PRODUCT_TYPE-LABELS.PRODUCT_TYPE
FROM PRODUCT_TYPE-LABELS

我收到以下我无法解决的错误ORA-00933: SQL command not properly ended。我正在研究 Apex Oracle(本课程必需)。 谢谢!

【问题讨论】:

【参考方案1】:

如果您的表格确实被命名为PRODUCT_TYPE-LABELS,那么您需要将其括在双引号中。 - 不是表格名称中允许的标准字符,因此要使用诸如此类的特殊字符,您需要在表格周围加上引号。我建议 AGAINST 使用这样的表名,并且可能使用 PRODUCT_TYPE_LABEL 之类的名称。

查询是否可以从 SQL Developer、SQLPlus 或任何其他可用于运行查询的工具中运行?

尝试运行查询:

SELECT PRODUCT_TYPE
FROM "PRODUCT_TYPE-LABELS"

【讨论】:

谢谢!更正此问题后,来自 ***.com/questions/7364969/…> 的解决方案完美运行【参考方案2】:
select * from (
    select rownum rowno, CUST_ID,CUST_NAME,no_of_orders,orders_amount,EMAIL from (
    select mst.CUST_ID, mst.CUST_NAME, count(mst.INVONO) no_of_orders, sum(SUB_TOTAL) orders_amount, au.EMAIL
    from sales_mst mst,CUSTOMER_INFO cust, APP_USERS au
    where cust.USER_NAME = au.USERNAME
    and cust.cust_id=mst.cust_id
    and (au.gender= :P41_GENDER or :P41_GENDER is null)
    and (au.DOB = :P41_DOB or :P41_DOB is null)
    group by mst.CUST_ID, mst.CUST_NAME,au.EMAIL
    having nvl(sum(SUB_TOTAL),0) > 0
    order by 3 desc,4 desc
    )) where rowno <=:P41_TO_CUSTOMER
/*select * from (
select rownum rowno, CUST_ID,CUST_NAME,no_of_orders,orders_amount from (
select mst.CUST_ID, mst.CUST_NAME, count(mst.INVONO) no_of_orders, sum(SUB_TOTAL) orders_amount
  from sales_mst mst
 group by mst.CUST_ID, mst.CUST_NAME
having nvl(sum(SUB_TOTAL),0) > 0
 order by 3 desc,4 desc
)) where rowno <=:P41_TO_CUSTOMER
*/

【讨论】:

以上是关于Apex Oracle 中的 SQL 多对多查询的主要内容,如果未能解决你的问题,请参考以下文章

Oracle-Apex 分拣穿梭车

sql 多对多查询结果仅当仅匹配且完全匹配数组中的所有项目时

用户-角色多对多查询sql

JOINing多对多表时避免SQL查询中的重复行

MyBatis学习10高级映射之多对多查询

MyBatis学习10高级映射之多对多查询