Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据SQL中其他属性的值设置属性的值?_Sql_Database_Mariadb_Innodb - Fatal编程技术网

如何根据SQL中其他属性的值设置属性的值?

如何根据SQL中其他属性的值设置属性的值?,sql,database,mariadb,innodb,Sql,Database,Mariadb,Innodb,我试图根据其他属性的值设置属性的值 我有下面的SQL语句 SELECT C.course_name, C.language, C.course_price, C.average_rating, C.category, P.name, P.surname, D.percentage, D.start_date, D.end_date, D.is_allowed FROM course C LEFT OUTER JOIN discount D ON C.course_id=D.discounted_

我试图根据其他属性的值设置属性的值

我有下面的SQL语句

SELECT C.course_name, C.language, C.course_price, C.average_rating, C.category, P.name, P.surname, D.percentage, D.start_date, D.end_date, D.is_allowed
FROM course C LEFT OUTER JOIN discount D ON C.course_id=D.discounted_course_id, course_creator CC, person P
WHERE C.course_creator_id=CC.course_creator_id AND CC.course_creator_id=P.person_id
我有以下的结果

预期结果同上,但第一排的课程价格为500

我想根据以下内容设置课程价格:

如果当前日期小于结束日期且允许=1,则我希望将折扣百分比应用于课程价格。例如,因为第一个元组的course_price是1000,百分比是50,所以假设end_date大于今天的日期,并且允许=1。那么课程价格应该等于500英镑

课程关系:

课程创建者关系:

折扣关系:

人际关系:


我想获取所有课程及其信息,并将这些课程的课程价格设置为折扣价格,前提是折扣关系具有课程的课程id且允许为1,并且折扣的结束日期大于今天的日期

您可以使用if或CASESQL92兼容函数进行设置。许多RDBMS都有它

以下是MySql的一个示例,摘自:

数据:

+---------+-------------------------------------+-------------+---------+--------+--------+------------+----------+---------+------------+
| book_id | book_name                           | isbn_no     | cate_id | aut_id | pub_id | dt_of_pub  | pub_lang | no_page | book_price |
+---------+-------------------------------------+-------------+---------+--------+--------+------------+----------+---------+------------+
| BK001   | Introduction to Electrodynamics     | 0000979001  | CA001   | AUT001 | P003   | 2001-05-08 | English  |     201 |      85.00 |
| BK002   | Understanding of Steel Construction | 0000979002  | CA002   | AUT002 | P001   | 2003-07-15 | English  |     300 |     105.50 |
| BK003   | Guide to Networking                 | 0000979003  | CA003   | AUT003 | P002   | 2002-09-10 | Hindi    |     510 |     200.00 |
| BK004   | Transfer  of Heat and Mass          | 0000979004  | CA002   | AUT004 | P004   | 2004-02-16 | English  |     600 |     250.00 |
| BK005   | Conceptual Physics                  | 0000979005  | CA001   | AUT005 | P006   | 2003-07-16 | NULL     |     345 |     145.00 |
| BK006   | Fundamentals of Heat                | 0000979006  | CA001   | AUT006 | P005   | 2003-08-10 | German   |     247 |     112.00 |
| BK007   | Advanced 3d Graphics                | 0000979007  | CA003   | AUT007 | P002   | 2004-02-16 | Hindi    |     165 |      56.00 |
| BK008   | Human Anatomy                       | 0000979008  | CA005   | AUT008 | P006   | 2001-05-17 | German   |      88 |      50.50 |
| BK009   | Mental Health Nursing               | 0000979009  | CA005   | AUT009 | P007   | 2004-02-10 | English  |     350 |     145.00 |
| BK010   | Fundamentals of Thermodynamics      | 0000979010  | CA002   | AUT010 | P007   | 2002-10-14 | English  |     400 |     225.00 |
| BK011   | The Experimental Analysis of Cat    | 0000979011  | CA004   | AUT011 | P005   | 2007-06-09 | French   |     225 |      95.00 |
| BK012   | The Nature  of World                | 0000979012  | CA004   | AUT005 | P008   | 2005-12-20 | English  |     350 |      88.00 |
| BK013   | Environment a Sustainable Future    | 0000979013  | CA004   | AUT012 | P001   | 2003-10-27 | German   |     165 |     100.00 |
| BK014   | Concepts in Health                  | 0000979014  | CA005   | AUT013 | P004   | 2001-08-25 | NULL     |     320 |     180.00 |
| BK015   | Anatomy & Physiology                | 0000979015  | CA005   | AUT014 | P008   | 2000-10-10 | Hindi    |     225 |     135.00 |
| BK016   | Networks and Telecommunications     | 00009790_16 | CA003   | AUT015 | P003   | 2002-01-01 | French   |      95 |      45.00 |
+---------+-------------------------------------+-------------+---------+--------+--------+------------+----------+---------+------------+
结果是:

+-------------------------------------+----------------+
| book_name                           | Language       |
+-------------------------------------+----------------+
| Introduction to Electrodynamics     | Engllish Book  | 
| Understanding of Steel Construction | Engllish Book  | 
| Guide to Networking                 | Other Lnaguage | 
| Transfer  of Heat and Mass          | Engllish Book  | 
| Conceptual Physics                  | Other Lnaguage | 
| Fundamentals of Heat                | Other Lnaguage | 
| Advanced 3d Graphics                | Other Lnaguage | 
| Human Anatomy                       | Other Lnaguage | 
| Mental Health Nursing               | Engllish Book  | 
| Fundamentals of Thermodynamics      | Engllish Book  | 
| The Experimental Analysis of Cat    | Other Lnaguage | 
| The Nature  of World                | Engllish Book  | 
| Environment a Sustainable Future    | Other Lnaguage | 
| Concepts in Health                  | Other Lnaguage | 
| Anatomy & Physiology                | Other Lnaguage | 
| Networks and Telecommunications     | Other Lnaguage | 
+-------------------------------------+----------------+
如果当前日期小于结束日期且允许=1,则我希望将折扣百分比应用于课程价格

您似乎需要一个CASE表达式:

SELECT C.course_name, C.language, C.course_price, C.average_rating, C.category,
     P.name, P.surname,
     D.percentage, D.start_date, D.end_date, D.is_allowed,
     (CASE WHEN current_date < D.end_date and D.is_allowed
           THEN C.course_price * D.percentage
           ELSE c.course_price
      END) as imputed_price
FROM course C LEFT OUTER JOIN
    discount D 
    ON C.course_id = D.discounted_course_id LEFT JOIN
    course_creator CC
    ON C.course_creator_id = CC.course_creator_id LEFT JOIN
    person P
    ON CC.course_creator_id = P.person_id;

注意,这也修复了连接语法。不要在FROM子句中使用逗号

由于我在你的问题中没有看到确切的RDBMS,我将给你一个应该在mssql server中工作的查询,请注意,我无法用确切的数据验证查询,因此我可能有打字错误

在mssql中,您可以非常轻松地将选择转换为更新。可能也在其他数据库中

更新C 设置课程价格=课程价格*100%/100 来自课程C C.course\u id上的左外连接折扣D=D.course\u id折扣, 课程创建者抄送,人员P 其中C.course\u creator\u id=CC.course\u creator\u id 和CC.course\u creator\u id=P.person\u id 和结束日期请提供样本数据以及所需结果。同时标记正在使用的数据库。不要将显式连接与隐式、逗号分隔的连接混合使用。太令人困惑了。在任何地方都使用显式连接语法。你能再复习一下吗?我确实提供了示例数据。这里的大多数人希望示例表数据和预期结果是格式化文本,而不是图像。此外,如果可能,请进行简化,即许多RDBMS都有此功能我认为只有MySQL支持非标准的IF-但是所有RDBMS都支持标准的CASE表达式。如果没有IF,您可以使用CASE。@Abylayasabirgaliyev先生,我知道我应该使用IF或CASE,但是如何使用?@MustafaYaşar通过为函数提供表达式和结果。读一读。如果我想在估算的价格中添加过滤器,我应该怎么做。我试着在MustafaYaşar添加估算价格的地方。一个简单的方法是CTE或子查询。
SELECT C.course_name, C.language, C.course_price, C.average_rating, C.category,
     P.name, P.surname,
     D.percentage, D.start_date, D.end_date, D.is_allowed,
     (CASE WHEN current_date < D.end_date and D.is_allowed
           THEN C.course_price * D.percentage
           ELSE c.course_price
      END) as imputed_price
FROM course C LEFT OUTER JOIN
    discount D 
    ON C.course_id = D.discounted_course_id LEFT JOIN
    course_creator CC
    ON C.course_creator_id = CC.course_creator_id LEFT JOIN
    person P
    ON CC.course_creator_id = P.person_id;