如何根据SQL中其他属性的值设置属性的值?
我试图根据其他属性的值设置属性的值 我有下面的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_
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 和结束日期
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;