【问题标题】:SQL Problem on retrieving rows for further processing检索行以进行进一步处理的 SQL 问题
【发布时间】:2021-09-12 12:43:20
【问题描述】:

我需要创建一个 SQL 查询,它可以给我在表 B 中具有第一和第二类别但在表 A 中只有第一类别行的行。 我的要求是将表 B 中该行的 TAX 更改为 0(我可以在检索该行后执行此操作并且我知道该怎么做)

表 A

CITY    CATEGORY    TAX
LONDON  FIRST       20
LONDON  SECOND      30
SYDNEY  FIRST       80
PARIS   SECOND      40  
NEWYORK FIRST       30

表 B

CITY    CATEGORY    TAX
LONDON  FIRST       20
LONDON  SECOND      30
SYDNEY  FIRST       80
PARIS   SECOND      40  
NEWYORK FIRST       30
NEWYORK SECOND      90

期望的输出

CITY    CATEGORY    TAX
NEWYORK SECOND      90

原始数据和表格更清晰:

CREATE TABLE TABLEA(CONTRACT TEXT, ID text, CLASS TEXT, ZONE TEXT, CHARGE TEXT, FST_SC TEXT, RATE TEXT, EFFECTIVE_DATE TEXT, PRIMARY KEY(CONTRACT,ID,CLASS,ZONE,CHARGE,FST_SC,RATE,EFFECTIVE_DATE));

CREATE TABLE TABLEB( CONTRACT TEXT , ID text, CLASS TEXT, ZONE TEXT, CHARGE TEXT, FST_SC TEXT, RATE TEXT, EFFECTIVE_DATE TEXT, PRIMARY KEY(CONTRACT,ID,CLASS,ZONE,CHARGE,FST_SC,RATE,EFFECTIVE_DATE));


INSERT INTO TABLEA VALUES('MS','US','UE',' ','NR','FIRST','15','09/23/2021');

INSERT INTO TABLEB VALUES('MS','US','UE',' ','NR','FIRST','15','09/23/2021');
INSERT INTO TABLEB VALUES('MS','US','UE',' ','NR','SECOND','15','09/23/2021');

DESIRED OUTPUT 行是 TABLEB 的第 2 行 - 'second' one

【问题讨论】:

  • 请分享示例数据的创建表和插入脚本。每个人都可以轻松提供解决方案。
  • 我已编辑问题以正确表示表格,我只需要使用 SELECT 语句检索所需的行,以便将其存储到变量中。仅 SELECT 语句部分需要帮助...请帮助
  • 您好阿曼,感谢您提供解决方案。我已经尝试过这个,但由于多个主键,我遇到了问题。因此,我发布原始数据和表结构以寻求帮助。在问题末尾添加了详细信息....
  • 您是否检查了共享脚本。脚本抛出错误。

标签: mysql sql join not-exists


【解决方案1】:

你可以试试下面的查询。

SELECT * FROM TableB WHERE CITY IN 
(
    SELECT CITY FROM TableA WHERE CITY IN(
    SELECT B.CITY 
    FROM TableB  B
    GROUP BY B.CITY  HAVING COUNT(DISTINCT B.CATEGORY)=2
) GROUP BY CITY  HAVING COUNT(DISTINCT CATEGORY)=1) 
AND CATEGORY='SECOND'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多