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_TYPE
和LABEL
之间创建了多对多关系。我想检索所有标有“无麸质”和“无乳糖”标签的产品,并找到了类似主题的帮助 (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 多对多查询的主要内容,如果未能解决你的问题,请参考以下文章