【问题标题】:Select columns thats greater than? [closed]选择大于的列? [关闭]
【发布时间】:2015-11-28 23:21:06
【问题描述】:

您好,我有一个表(mysql),在我的查询中,我只想获取大于或等于 4 的列,但我不知道该怎么做

SELECT * FROM my_table WHERE * (all foo columns foo1-foo7) >= 4 AND date = '2015-09-03'

我的桌子看起来像

id | foo1 | foo2 | foo3 | foo4 | foo5 | foo6 | foo 7 | date
-----------------------------------------------------
1  |   5  |  10  |  8   |  0   |   2  |  4   |  5    | 2015-09-03
2  |   7  |  18  |  0   |  1   |   0  |  5   |  7    | 2015-09-04

所以我的结果应该是

id | foo1 | foo2 | foo3 | foo6 | foo 7 | date
-----------------------------------------------------
1  |   5  |  10  |  8   |  4   |  5    | 2015-09-03

这可能吗?提前感谢

【问题讨论】:

  • 这并不是关系数据库的真正用途。如果您有不止一行,您将拥有可变列,因为有些列会根据内容包含在每行中,也不会包含在每行中。
  • 如果日期不是唯一的,并且您想稍后询问多个 ROW,那么您不能在 SQL 中执行此操作。如果您只想要单行并且日期是唯一的,那么只需获取结果并稍后编辑它......
  • 日期是唯一的,我每天都有一行,比如 '2015-09-03' 等等,我可以稍后用 jquery 完成这个,但我想知道我是否可以在我的问题中过滤这个所以我不需要 if/else me throw all columns
  • SELECT 语句总是返回相同的列集,与当前表数据无关。因此,您不能编写有时返回 7 列,有时返回 6、8 或任何其他列数的 SELECT。
  • Okej @jarlh 谢谢,那我就用jquery或者php来过滤

标签: php jquery mysql sql sequelpro


【解决方案1】:

更合适的答案(对于 RDBMS)是使用具有外键关系和约束的两个表。

MASTER
ID                DATE
1                 2015-09-03

DETAIL
ID       MASTER_ID    MYNAME  MYVALUE
1        1            tom     5
2        1            bill    10
3        1            kev     8
4        1            bob     0
5        1            other   2
6        1            bleh    4
7        1            snarf   5

然后

SELECT m.id, m.date, d.myvalue FROM master m 
INNER JOIN detail d ON m.id = d.master_id 
WHERE m.date = '2015-09-03' AND d.myvalue > 4

这为您提供了多行,但如果您愿意,您可以使用 RDBMS 的 PIVOT 函数将其转换为其他内容。

例如

SELECT m.id, m.date, d.myvalue FROM master m 
INNER JOIN detail d ON m.id = d.master_id 
WHERE m.date = '2015-09-03' AND d.myvalue > 4
PIVOT myvalue FOR myname

(sql server 语法)你最终会得到

ID    date        tom    bill    kev    snarf
1     2015-09-03  5      10      8      5

【讨论】:

    【解决方案2】:

    试试这个

    SELECT * FROM my_table WHERE id >= 4 AND foo1 >=4 AND foo2 >=4 AND date = '2015-09-03'
    

    填写其余的foo,避免同时使用IS和比较运算符。

    【讨论】:

    • 所以输出将只有您在此查询中运行的列?
    • @Jai 只要他有固定的结构,就可以。安全的方式。
    • 不,它总是选择所有列(SELECT * 倾向于这样做!)并且只选择 ID 大于 4 的行(出于什么原因???)并且 foo1 大于 4。这没有什么意义!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 2012-04-18
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多