1

その場で SQL を生成し、それを mySQL データベースに対して実行する、継承したスクリプトがあります。

現在、「WHERE」句で単純な WHERE AND AND AND AND ステートメントに制限されています

例えば

SELECT * FROM Trucks WHERE Make = 'Volvo' AND Dealership = 'United' AND color ='White'  

最悪の場合、これらの AND 句を 40 個並べることができます。

追加の AND 引数を並べるのは非常に簡単です。それを書き直さなければならないのはお尻の痛みでしょう。

私の問題は次のとおりです。関連するテーブルを検索する必要があります。AND AND AND を維持する方法を理解する必要がありますが、AND で好きなだけ複雑な引数を使用できます。

だから私のコードは次のようになります

SELECT * FROM Trucks WHERE Make = 'Volvo' AND (anything mySQL likes) AND color ='White'

スキーマは次のとおりです。

CREATE  TABLE `Trucks` (
  `ID` INT NOT NULL AUTO_INCREMENT ,
  `Make` VARCHAR(45) NULL ,
  `Current_PartList_ID` INT NULL ,
  PRIMARY KEY (`ID`) );

INSERT INTO `Trucks` (`Make`, `Current_PartList_ID`) VALUES ('Volvo', '1');
INSERT INTO `Trucks` (`Make`, `Current_PartList_ID`) VALUES ('Volvo', '2');
INSERT INTO `Trucks` (`Make`, `Current_PartList_ID`) VALUES ('Mac', '3');
INSERT INTO `Trucks` (`Make`, `Current_PartList_ID`) VALUES ('Mac', '5');
INSERT INTO `Trucks` (`Make`, `Current_PartList_ID`) VALUES ('Daihatsu', '8');
INSERT INTO `Trucks` (`Make`, `Current_PartList_ID`) VALUES ('Volvo', '4');


CREATE  TABLE `Parts_lists` (
  `ID` INT NOT NULL AUTO_INCREMENT ,
  `Carb_Model` VARCHAR(45) NULL ,
  `Carb_date` DATE NULL ,
  `Tire_type` VARCHAR(45) NULL ,
  `Tire_date` DATE NULL ,
  PRIMARY KEY (`ID`) );

INSERT INTO `Parts_lists` (`Carb_Model`, `Carb_date`, `Tire_type`, `Tire_date`) VALUES ('Hirsch', '2012-12-19', 'Toyo', '2013-01-01');
INSERT INTO `Parts_lists` (`Carb_Model`, `Carb_date`, `Tire_type`, `Tire_date`) VALUES ('HIrsch', '2013-02-14', 'Goodyear', '2011-03-16');
INSERT INTO `Parts_lists` (`Carb_Model`, `Carb_date`, `Tire_type`, `Tire_date`) VALUES ('Bosch', '2011-11-04', 'Toyo', '2013-01-01');
INSERT INTO `Parts_lists` (`Carb_Model`, `Carb_date`, `Tire_type`, `Tire_date`) VALUES ('Miller', '2009-10-11', 'Toyo', '2010-04-17');
INSERT INTO `Parts_lists` (`Carb_Model`, `Carb_date`, `Tire_type`, `Tire_date`) VALUES ('Bosch', '2011-01-07', 'Goodyear', '2013-01-06');
INSERT INTO `Parts_lists` (`Carb_Model`, `Carb_date`, `Tire_type`, `Tire_date`) VALUES ('Bosch', '2012-09-16', 'Lamb', '2012-06-25');
INSERT INTO `Parts_lists` (`Carb_Model`, `Carb_date`, `Tire_type`, `Tire_date`) VALUES ('Miller', '2011-07-22', 'Unknown', '2012-04-07');
INSERT INTO `Parts_lists` (`Carb_Model`, `Carb_date`, `Tire_type`, `Tire_date`) VALUES ('Davis', '2009-03-09', 'Hawking', '2012-06-16');
INSERT INTO `Parts_lists` (`Carb_Model`, `Carb_date`, `Tire_type`, `Tire_date`) VALUES ('Sanno', '2010-01-07', 'Goodyear', '2009-07-16');
INSERT INTO `Parts_lists` (`Carb_Model`, `Carb_date`, `Tire_type`, `Tire_date`) VALUES ('Thrust', '2012-11-11', 'Lamb', '2004-04-08');

この AND 構造を念頭に置いてください。取得方法: ハーシュ キャブを搭載したすべてのボルボ トラック?

(この場合は、Trucks テーブルのレコード 1 と 2 です)

4

1 に答える 1

2

試す:

SELECT * FROM Trucks WHERE Make = 'Volvo' AND Current_PartList_ID in (select ID from    Parts_List where Carb_Model = 'Hirsch')
于 2013-05-22T04:35:24.957 に答える