نمایش نتایج 1 تا 8 از 8

نام تاپیک: دستور SQL برای جستجو در جداول مرتبط

  1. #1

    دستور SQL برای جستجو در جداول مرتبط

    سلام دوستان

    من به دستور SQL ای نیاز دارم که بتواند با استفاده از Relation های جداول جستجو را

    انجام دهد . :roll:

    مثلا فرض کنید دو جدول به صورت زیر داریم :

    مسافر سفر
    ---------- ---------
    کد مسافر کد سفر
    نام مسافر کد مسافر

    حالا به دستور SQL ای نیاز دارم که :

    نام مسافر گرفته شود و مشخص کند که این مسافر چه سفری داشته است

    :) از توجهتان ممنون .

  2. #2
    دوست عزیزم،
    فرض کنید جداول شما به این صورت باشه (چند رکورد نمونه هم وارد میکنیم):

    CREATE TABLE Mosafer (
    MosaferID INT,
    MosaferName NVARCHAR(80))
    GO
    INSERT Mosafer VALUES(1,'Ali')
    INSERT Mosafer VALUES(2,'Nima')
    GO
    CREATE TABLE Safar(
    SafarID INT,
    MosaferID INT,
    SafarDate DATETIME,
    Maghsad NVARCHAR(50))
    GO
    INSERT Safar VALUES(1,1,'2004/2/25','Shiraz')
    INSERT Safar VALUES(2,1,'2004/4/21','Mashad')
    INSERT Safar VALUES(3,2,'2003/5/5','Esfehan')
    INSERT Safar VALUES(4,2,'2002/2/5','Tabriz')
    INSERT Safar VALUES(5,2,'2004/11/6','Zanjan')
    GO

    در اینجا ما فقط 2 مسافر معرفی کردیم که هر کدام تعدادی سفر داشتن. برای اینکه بدست بیاریم یک مسافر خاص، چه سفرهایی داشته، یک INNER JOIN ساده انجام میدیم:
    DECLARE @MID INT
    SET @MID = 1

    SELECT Mosafer.MosaferName, Safar.SafarDate, Safar.Maghsad FROM
    Mosafer INNER JOIN Safar ON Mosafer.MosaferID=Safar.MosaferID
    WHERE Safar.MosaferID=@MID

    در اینجا فرض کردیم مسافرتهای مسافری با کد 1 مد نظر بوده. مثلا این دستور رو با مقدار 2 میتونین اجرا کنین یا هر کدی که مربوط به یک مسافر باشه.

    موفق باشید،
    امین ثباتی MCSD

  3. #3
    دوست عزیز

    از اینکه به سوالم توجه کرده و با حوصله و دقت زیادی جواب مرا دادید بسیار متشکر و ممنونم .

    ولی من در VB6 نتوانستم باز از دستور SQL ای که توضیح داده اید استفاده کنم . :?:

    آیا استفاده @ برای فیلدهای کلید لازم است ؟ :|

  4. #4
    دقیقا کدام دستور SQL به اشکال خورد؟ ضمنا @ به فیلد کلیدی ارتباطی نداره و صرفا برای تعریف متغیر استفاده کردم.
    شاید مشکل شما در نحوه کد نویسی بوده. به چه صورت از VB دستور SELECT رو به SQL Server ارسال کردین؟

  5. #5
    سلام :)

    strsql = "SELECT Passengerr.Name, Passenger_Tour.Waggon_Number , Passenger_Tour.Seat_Number FROM Passenger INNER JOIN Passenger_Tour ON Passenger.PassengerID = Passenger_Tour.PassengerID WHERE  Passenger_Tour.PassengerID = @1"


    حالا به جای 1 کد مسافر را می گذارم . :?
    باز کردن پایگاه داده هم به صورت زیر است :


      objCnn.CursorLocation = adUseClient
    objCnn.Open Provider & ";" & DataSource
    objCmd.ActiveConnection = objCnn
    objCmd.CommandType = adCmdText
    objCmd.CommandText = strsql
    Set objRst = objCmd.Execute(strsql)


    باز هم از کمکتان ممنون . :flower: :flower:

  6. #6
    دوست عزیزم،
    وقتی شما از SQL Server استفاده میکنید، ارسال Query به طور مستقیم کار مناسبی نیست. باید Query رو در یک Stored Procedure قرار بدین تا SQL Server اون رو Cache کنه و براش Execution Plan بدست بیاره تا سرعت اجراش افزایش پیدا کنه. مثلا چیزی شبیه به این:

    CREATE PROC MyQuery
    @PID INT AS

    SELECT Passengerr.Name, Passenger_Tour.Waggon_Number ,
    Passenger_Tour.Seat_Number FROM Passenger INNER JOIN Passenger_Tour ON
    Passenger.PassengerID = Passenger_Tour.PassengerID WHERE
    Passenger_Tour.PassengerID = @PID

    حالا از VB، اون رو Call میکنیم:

    Dim cnn As New ADODB.Connection
    Dim cmd As New ADODB.Command
    Dim rst As ADODB.Recordset
    Dim PassengerID As Integer

    Private Sub Form_Load()
    PassengerID = 1
    cnn.ConnectionString = "تنظیمات مورد نیاز"
    cnn.CursorLocation = adUseClient
    cnn.Open

    Set cmd.ActiveConnection = cnn
    cmd.CommandText = "MyQuery"
    cmd.CommandType = adCmdStoredProc

    cmd.Parameters.Append cmd.CreateParameter _
    ("P1", adInteger, adParamInput, , PassengerID)

    Set rst = cmd.Execute
    Set DataGrid1.DataSource = rst
    End Sub

    که در PassengerID = 1 هر مقداری که به جای 1 نیاز دارید قرار میدین. ضمنا من یک DataGrid روی فرم قرار دادم تا نتیجه دیده بشه.

  7. #7
    ممنون از توجهتان ، :flower: :flower: :flower:

    میرم امتحان کنم . :) :)

  8. #8
    موفق باشید

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •