首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySql自引用查询

问MySql自引用查询
EN

Stack Overflow用户
提问于 2012-06-12 18:26:24
回答 3查看 2.5K关注 0票数 1

我有一个名为客户端的下表,其列和值如下:

代码语言:javascript
复制
+--------+-----------+--------------+----------------+
| uid    | client_id | client_input |  input_value   |
+--------+-----------+--------------+----------------+
| 1      |   22      |  City        |  Seattle       |
+--------+-----------+--------------+----------------+
| 2      |   45      |  City        |  Ojai          |
+--------+-----------+--------------+----------------+
| 3      |   22      |  State       |  OR            |
+--------+-----------+--------------+----------------+
| 4      |   45      |  State       |  CA            |
+--------+-----------+--------------+----------------+
| 5      |   65      |  City        |  Orlando       |
+--------+-----------+--------------+----------------+
| 6      |   74      |  State       |  AB            |
+--------+-----------+--------------+----------------+
| 7      |   65      |  State       |  FL            |
+--------+-----------+--------------+----------------+
| 8      |   12      |  City        |  Los Angeles   |
+--------+-----------+--------------+----------------+
| 9      |   12      |  State       |  CA            |

我需要PHP/MySql查询,它将列出位于'CA‘状态的input_value列中的所有城市。显然,公共标识符是 client_id ,它始终是匹配的,因为如果客户端位于‘洛杉矶’中,那么在input_value列中包含'CA'值的行中也有相同的client_id。这个表有超过800万行,任何快速执行的均衡器都会受到高度赞赏。

我的大脑被炸了,截止日期快到了,不能改变桌子的设计,需要帮助,请!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-12 18:39:22

代码语言:javascript
复制
SELECT *
FROM table AS t1 INNER JOIN table AS t2 ON t1.client_id = t2.client_id
WHERE t1.client_input = 'City' AND t2.client_input = 'State' AND t2.input_value = 'CA'

注:,这可能需要一些调整,并可能是优化的。但它应该能让你开始冷静下来。

票数 1
EN

Stack Overflow用户

发布于 2012-06-12 18:42:31

我没有测试这个查询。但是这个或类似的查询应该可以工作。我首先使用了两个子查询来避免不可缺少的联接。第一个子查询过滤器用于状态'CA‘,第二个子查询用于城市。如果您想要按州为所有城市创建一个表,请从子查询a中删除'CA‘子句。

代码语言:javascript
复制
SELECT b.input_value AS city, a.input_value AS state
FROM 
  (SELECT client_id, input_value
   FROM tablename
   WHERE input_value = 'CA'
   AND client_input = 'State')
  AS a,
  (SELECT client_id, input_value
   FROM tablename
   WHERE client_input = 'City')
  AS b
WHERE a.client_id = b.client_id
票数 0
EN

Stack Overflow用户

发布于 2012-06-12 18:46:53

代码语言:javascript
复制
SELECT distinct 
      t2.Input_Value as City
   from
      YourTable t1
         JOIN YourTable t2
            on t1.client_ID = t2.Client_ID
           AND t2.client_input = 'City'
   where
          t1.client_input = 'State'
      AND t1.Input_Value = 'CA'

我会有两个索引。(Client_Input,Input_Value)和(Client_ID,Client_Input,Input_Value)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11002565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档