Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

एकाधिक पंक्तियों में दो स्तंभों के बीच मूल्यों का चयन

मुझे आपका ट्रिगर बदलना पड़ा, क्योंकि इसने भेजने या तीसरी पंक्ति को स्वीकार नहीं किया

जैसा कि आप देख सकते हैं

आप NEW.product_id का उपयोग करके सभी new is तक पहुंच सकते हैं, किसी चयन की बिल्कुल भी आवश्यकता नहीं है

अगली चीज़ जो मुझे बदलने की ज़रूरत थी वह यह थी कि अब मेरे पास कोई आईडी नहीं थी इसलिए मैंने फिर से NEW.product:id का उपयोग किया।

स्कीमा (MySQL v5.7)

CREATE TABLE `product` (
  `product_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `product` varchar(100) NOT NULL,
  `total_quantity` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `range_and_prices` (
  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `ranges_from` int(11) NOT NULL,
  `ranges_to` int(11) NOT NULL,
  `prices` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `range` (
  `product_id` INT NOT NULL PRIMARY KEY,
  `range_prices` int(11)  NULL,
  FOREIGN KEY (`product_id`) REFERENCES `product`(`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `range_and_prices` (`ranges_from`,`ranges_to`, `prices`) VALUES
('1','20', 10),
('21','40', 20),
('41','60', 40);

CREATE TRIGGER `range_on_product`
AFTER insert ON `product`
FOR EACH ROW
insert into `range`(`product_id`, `range_prices`) VALUES 
(NEW.product_id , (SELECT DISTINCT prices FROM range_and_prices WHERE (SELECT total_quantity FROM product WHERE product_id=NEW.product_id) BETWEEN ranges_from AND ranges_to ORDER BY prices ASC
LIMIT 1 ) );

INSERT INTO `product` ( `product`, `total_quantity`) VALUES ("Coffee", "5"),("sugar", "25"); 

क्वेरी #1

SELECT * FROM `range_and_prices`;

| id  | ranges_from | ranges_to | prices |
| --- | ----------- | --------- | ------ |
| 1   | 1           | 20        | 10     |
| 2   | 21          | 40        | 20     |
| 3   | 41          | 60        | 40     |

क्वेरी #2

SELECT * FROM `product`;

| product_id | product | total_quantity |
| ---------- | ------- | -------------- |
| 1          | Coffee  | 5              |
| 2          | sugar   | 25             |

क्वेरी #3

SELECT * FROM `product` INNER JOIN `range` ON product.product_id=range.product_id;

| product_id | product | total_quantity | product_id | range_prices |
| ---------- | ------- | -------------- | ---------- | ------------ |
| 1          | Coffee  | 5              | 1          | 10           |
| 2          | sugar   | 25             | 2          | 20           |

डीबी फिडल पर देखें




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाबेस में टाइमस्टैम्प डालें + 7 दिन

  2. सिद्धांत स्तंभ नहीं मिला:1054 अज्ञात स्तंभ 'फ़ीचर्स' 'फ़ील्ड सूची' में

  3. mysql_upgrad विफल - innodb टेबल मौजूद नहीं है?

  4. आर्क लिनक्स पर MySQL रिलेशनल डेटाबेस का उपयोग करना

  5. रूट पासवर्ड को शून्य पर कैसे सेट करें