簡體   English   中英

在我的 SQL 查詢中使用“或”會導致 MS Access 2019 崩潰

[英]Using "or" in my SQL query crashes MS Access 2019

這是我關於 Stack 的第一個問題。 我是一名學生,試圖通過實踐來發展我的查詢能力。 使用 Microsoft Access 和一些公開的人口普查數據(57,000 行的 5 個表),我遇到了以下問題。

當我嘗試在“where”語句中使用“or”而不是“and”時,會導致 Access 停止響應。 為什么會這樣?

例如,當我嘗試更改時:

not MARRIAGE.P_TOT_MARRD_REG_MARRGE = 0 and not EDUCATION.INFANTS_PRIMARY_TOT_P = 0

對此:

not MARRIAGE.P_TOT_MARRD_REG_MARRGE = 0 or not EDUCATION.INFANTS_PRIMARY_TOT_P = 0

甚至對此:

not MARRIAGE.P_TOT_MARRD_REG_MARRGE = 0 or EDUCATION.INFANTS_PRIMARY_TOT_P = 0

它會導致崩潰。

這是因為我的語法錯誤嗎? 還是我誤解了 Sequel 中“或”子句的應用?

我沒有使用“或”的完整代碼如下。

(
  select distinct top 10 
      CHILDREN.PK as top10Last10, 
      CHILDREN.TOTAL_TOTAL as children, 
      HOUSEHOLD.TOTAL_FAMHHOLD as familys, 
      FAMILY.INTCT_FAM_NO_OTR_CHLD_PRE_FAM as undivorced, 
      MARRIAGE.P_TOT_MARRD_REG_MARRGE as officiated, 
      EDUCATION.INFANTS_PRIMARY_TOT_P as primaryKto6
  from 
      CHILDREN, 
      HOUSEHOLD, 
      FAMILY, 
      MARRIAGE, 
      EDUCATION
  where 
      CHILDREN.PK = HOUSEHOLD.PK and 
      CHILDREN.PK = FAMILY.PK and 
      CHILDREN.PK = MARRIAGE.PK and 
      CHILDREN.PK = EDUCATION.PK and 
      not CHILDREN.TOTAL_TOTAL = 0 and 
      not HOUSEHOLD.TOTAL_FAMHHOLD = 0 and
      not FAMILY.INTCT_FAM_NO_OTR_CHLD_PRE_FAM = 0 and 
      not MARRIAGE.P_TOT_MARRD_REG_MARRGE = 0 and 
      not EDUCATION.INFANTS_PRIMARY_TOT_P = 0
  order by 
      CHILDREN.TOTAL_TOTAL asc, 
      HOUSEHOLD.TOTAL_FAMHHOLD asc, 
      FAMILY.INTCT_FAM_NO_OTR_CHLD_PRE_FAM asc, 
      MARRIAGE.P_TOT_MARRD_REG_MARRGE asc, 
      EDUCATION.INFANTS_PRIMARY_TOT_P asc
) 
 union all
(
  select distinct top 10 
      CHILDREN.PK, 
      CHILDREN.TOTAL_TOTAL, 
      HOUSEHOLD.TOTAL_FAMHHOLD, 
      FAMILY.INTCT_FAM_NO_OTR_CHLD_PRE_FAM, 
      MARRIAGE.P_TOT_MARRD_REG_MARRGE, 
      EDUCATION.INFANTS_PRIMARY_TOT_P
  from 
      CHILDREN, 
      HOUSEHOLD, 
      FAMILY, 
      MARRIAGE, 
      EDUCATION
  where 
      CHILDREN.PK = HOUSEHOLD.PK and 
      CHILDREN.PK = FAMILY.PK and 
      CHILDREN.PK = MARRIAGE.PK and 
      CHILDREN.PK = EDUCATION.PK and 
      not CHILDREN.TOTAL_TOTAL = 0 and
      not HOUSEHOLD.TOTAL_FAMHHOLD = 0 and
      not FAMILY.INTCT_FAM_NO_OTR_CHLD_PRE_FAM = 0 and
      not MARRIAGE.P_TOT_MARRD_REG_MARRGE = 0 and
      not EDUCATION.INFANTS_PRIMARY_TOT_P = 0
  order by 
      CHILDREN.TOTAL_TOTAL desc, 
      HOUSEHOLD.TOTAL_FAMHHOLD desc, 
      FAMILY.INTCT_FAM_NO_OTR_CHLD_PRE_FAM desc, 
      MARRIAGE.P_TOT_MARRD_REG_MARRGE desc, 
      EDUCATION.INFANTS_PRIMARY_TOT_P desc
);

這個完整的代碼正在運行並返回我期望的表格。

提前感謝您的任何回復。

首先,不響應不是崩潰。

接下來,您可能需要更具體:

(not MARRIAGE.P_TOT_MARRD_REG_MARRGE = 0) or (not EDUCATION.INFANTS_PRIMARY_TOT_P = 0)

或者:

not (MARRIAGE.P_TOT_MARRD_REG_MARRGE = 0 or EDUCATION.INFANTS_PRIMARY_TOT_P = 0)

此外,請確保您在這些字段上有索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM